treeview自动从表中添加标题和列值做目录的方法2,该方法是借鉴万一老师的
http://www.cnblogs.com/del/archive/2008/05/15/1114450.html
首先界面上添加treeview组件,然后在treeview的onchange事件里这样写:
因为要用到定义个过程,需要在接口声明里引用
private { Private declarations } /// <summary> /// 刷新左侧treeView /// </summary> procedure RefreshLeftTree(Sender: TObject); public { Public declarations } end;
procedure TForm3.RefreshLeftTree(Sender: TObject); var i: Integer; node: TTreeNode; List: TStringList; s,fieldName: string; begin //刷新前全部清空原来的列表 TreeView1.Items.Clear; {建立 List} List := TStringList.Create; List.Sorted := True; {指定排序} List.Duplicates := dupIgnore; {避免重复} {把数据加入到 TreeView} do begin fieldName := frmDataPool.qry需要做的事.FieldDefs[i].Name; if not 'ID说明附件事情'.Contains(fieldName) then begin node := TreeView1.Items.Add(nil, fieldName); {字段名} {为避免数据重复, 先把数据给 List} List.Clear; frmDataPool.qry需要做的事.First; while not frmDataPool.qry需要做的事.Eof do begin List.Add(frmDataPool.qry需要做的事.FieldByName(fieldName).AsString); frmDataPool.qry需要做的事.Next; end; {把 List 中的数据加入到 TreeView} for s in List do begin TreeView1.Items.AddChild(node, s); end; end; end; List.Free; end;
且增加新记录后也要刷新下目录才合理
procedure TForm3.Button3Click(Sender: TObject); begin Form4.ShowModal;//showmodal可以确保这个窗口关闭后才执行下一步 //增加后刷新下 RefreshLeftTree(Sender); end;
onchange的触发事件代码:
procedure TForm3.TreeView1Change(Sender: TObject; Node: TTreeNode); begin if Node.Parent <> nil then begin {下面的 Filter 其实就是 SQL 查询语句, 如果用其他数据库替换就是} frmDataPool.qry需要做的事.Filter := Node.Parent.Text + '=''' + Node.Text + ''''; frmDataPool.qry需要做的事.Filtered := True; end else frmDataPool.qry需要做的事.Filtered := False; {选字段名时取消过虑} end;