none
ado.net treeview控件怎么动态添加节点(数据来自数据库表) RRS feed

答案

  • 你好!

    下面是以前写了的使用递归创建 TreeView 的示例,希望对你有帮助。

    using System;
    using System.ComponentModel;
    using System.Data;
    using System.Windows.Forms;
    
    namespace X.WinForms.UI.Controls.TreeViews
    {
      public partial class D001 : Form
      {
        public D001()
        {
          InitializeComponent();
    
          this.InitData(); // 初始数据
          this.BuildTreeView(this.dt, this.treeView1.Nodes, 0); // 递归创建树
        }
    
        private DataTable dt;
    
        private void InitData()
        {
          this.dt = new DataTable();
          this.dt.Columns.Add("Id", typeof(int));// 当前节点ID
          this.dt.Columns.Add("ParentId", typeof(int));// 父节点ID
          this.dt.Columns.Add("Name", typeof(string));// 节点名称
    
          this.dt.Rows.Add(new object[] { 1, 0, "中国" });
          this.dt.Rows.Add(new object[] { 2, 1, "四川" });
          this.dt.Rows.Add(new object[] { 3, 2, "成都" });
          this.dt.Rows.Add(new object[] { 3, 2, "绵阳" });
          this.dt.Rows.Add(new object[] { 4, 1, "重庆" });
        }
    
        /// <summary>
        /// 递归创建树
        /// </summary>
        /// <param name="dt">数据源</param>
        /// <param name="nodes">节点集合</param>
        /// <param name="parentId">父节点值</param>
        private void BuildTreeView(DataTable dt, TreeNodeCollection nodes, int parentId)
        {
          string filter = string.Format("ParentId = '{0}'", parentId);
          foreach (DataRow row in dt.Select(filter))
          {
            int id = (int)row["Id"];
            string name = (string)row["Name"];
    
            TreeNode node = new TreeNode();
    
            node.Tag = id;
            node.Text = name;
            nodes.Add(node); // 添加节点
    
            this.BuildTreeView(dt, node.Nodes, id); // 递归添加当前节点的子节点
          }
        }
      }
    }
    


    知识改变命运,奋斗成就人生!
    2010年5月24日 14:16
    版主