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); vari: Integer;node: TTreeNode;List: TStringList;s,fieldName: string; begin//刷新前全部清空原来的列表 TreeView1.Items.Clear;{建立 List}List := TStringList.Create;List.Sorted := True; {指定排序}List.Duplicates := dupIgnore; {避免重复}{把数据加入到 TreeView}for i := 0 to frmDataPool.qry需要做的事.FieldDefs.Count - 1 dobeginfieldName := frmDataPool.qry需要做的事.FieldDefs[i].Name;if not 'ID说明附件事情'.Contains(fieldName) thenbeginnode := TreeView1.Items.Add(nil, fieldName); {字段名}{为避免数据重复, 先把数据给 List}List.Clear;frmDataPool.qry需要做的事.First;while not frmDataPool.qry需要做的事.Eof dobeginList.Add(frmDataPool.qry需要做的事.FieldByName(fieldName).AsString);frmDataPool.qry需要做的事.Next;end;{把 List 中的数据加入到 TreeView}for s in List dobeginTreeView1.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); beginif Node.Parent <> nil thenbegin{下面的 Filter 其实就是 SQL 查询语句, 如果用其他数据库替换就是}frmDataPool.qry需要做的事.Filter := Node.Parent.Text + '=''' + Node.Text + '''';frmDataPool.qry需要做的事.Filtered := True;end else frmDataPool.qry需要做的事.Filtered := False; {选字段名时取消过虑} end;