C# winform 中 treeview 动态添加节点问题

2024年11月29日 20:59
有2个网友回答
网友(1):

先给出我做的效果图,应该符合你的要求:

   

  代码:

        private DataSet GetData(string sql)

        {   //不知道你用的什么数据库,我由于最近在用Access,

            //所以函数是连接的Access,得到    DataSet

           //如果用SQL Server或者其他是类似的,传入sql语句,得到DataSet

           //DBAccess是自定义类,没有贴上代码,如果要具体的数据库连接代码,说一下

            string accessDb = @"E:\dat.mdb";

            DBAccess access = new DBAccess(accessDb, sql);

            return access.GetDataSet();

        }

    private void button1_Click(object sender, EventArgs e)

        {

            if (!treeView1.Nodes.ContainsKey("区域名"))//先判断是否已经存在这个节点

            {

                TreeNode root = new TreeNode("区域名");//创建节点

        root.Name = "区域名";//为节点取个名字,这儿创建的是根节点

                treeView1.Nodes.Add(root);//将节点添加到treeView1上

                DataSet ds = GetData("select distinct 区域位置 from T_Machines");//获取数据集dataset

                foreach (DataRow row in ds.Tables[0].Rows)

                {

                    TreeNode node = new TreeNode(row["区域位置"].ToString());

                    node.Name = row["区域位置"].ToString();

                    if (!root.Nodes.ContainsKey(node.Name))

                    {

                        root.Nodes.Add(node);

                    }

                }

            }

        }

        private void treeView1_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)

        {

            TreeNode clickedNode = e.Node;

            string name = clickedNode.Text;

            DataSet ds = GetData("select 机器编号 from T_Machines where 区域位置='" + name + "'");           

            foreach (DataRow row in ds.Tables[0].Rows)

            {

                TreeNode node = new TreeNode(row["机器编号"].ToString());

                node.Name = row["机器编号"].ToString();

                if (!clickedNode.Nodes.ContainsKey(node.Name))

                {

                    clickedNode.Nodes.Add(node);

                }

            }

        }

网友(2):

private void Form1_Load(object sender, EventArgs e)
{

DataColumn dc = new DataColumn("编号");
DataColumn dc2 = new DataColumn("位置");
DataColumn dc3 = new DataColumn("机型");
dt.Columns.Add(dc);
dt.Columns.Add(dc2);
dt.Columns.Add(dc3);
DataRow dr;
dr = dt.NewRow();
dr["编号"] = 1;
dr["位置"] = "江苏";
dr["机型"] = "201010";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr["编号"] = 2;
dr["位置"] = "南京";
dr["机型"] = "201010";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr["编号"] = 3;
dr["位置"] = "无锡";
dr["机型"] = "201010";
dt.Rows.Add(dr);

--------------------下面是从DataTable中遍历的出来的
foreach (DataRow item in dt.Rows)
{
string where = item["位置"].ToString();
string time = item["机型"].ToString();
TreeNode t = new TreeNode(where);
TreeNode tt = new TreeNode(time);
t.Nodes.Add(tt); // 这些是只有一层子节点的,可以自己再
treeView1.Nodes.Add(t);
}