zoukankan      html  css  js  c++  java
  • treeview自动从表中添加标题和列值做目录的方法2

    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}
      for i := 0 to frmDataPool.qry需要做的事.FieldDefs.Count - 1 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;
  • 相关阅读:
    Java并发(5)- ReentrantLock与AQS
    Java并发(4)- synchronized与CAS
    Windows cmd 查看文件MD5 SHA1 SHA256
    进程、线程、协程概念理解
    Python学习--Python运算符
    Python学习--Python变量类型
    MySQL性能优化
    Docket学习--Docker入门
    Python学习--Python基础语法
    Python学习--Python 环境搭建
  • 原文地址:https://www.cnblogs.com/ddxxxb/p/6803204.html
Copyright © 2011-2022 走看看