您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > C/C++资料 > C# treeview添加三层结构,并为叶子节点增加双击事件
treeview添加新节点的代码://InitialTreeView//treeView1.BeginUpdate();//treeView1.Nodes.Clear();//treeView1.Nodes.Add(Parent);//treeView1.Nodes[0].Nodes.Add(Child1);//treeView1.Nodes[0].Nodes.Add(Child2);//treeView1.Nodes[0].Nodes[1].Nodes.Add(Grandchild);//treeView1.Nodes[0].Nodes[1].Nodes[0].Nodes.Add(GreatGrandchild);//treeView1.EndUpdate();核心思想,用dataAdapter进行数据查询,将查询结果赋值给DataSet中的一个DataTable,然后用DataTableReader来读取DataTable,再利用DataRow[]数组,将DataTableReader读取的信息存入数组,其中数组长度可以由属性DataTable.Rows.Count来确定,数组赋值DataTable.Rows.CopyTo(DataRow[],0),通过这条命令,已经将DataReader读取的DataTable中的数据存入DataRow[DataTable.Rows.Count]中了。需要注意的是DataRows存储的数据类型是object,所以最好调试的时候加入断点来判断自己所需数据的位置。如array[0].ItemArray[0].ToString(),就是将Rows数组中第一个元素所包含的ItemArray成员的第一个元素转化成了字符串类型。将根节点,第二级节点和叶子节点分别用上述方法表示,再利用嵌套for循环就可以完成treeview中添加三层结构的需求。treeView1.BeginUpdate();treeView1.Nodes.Clear();for(inti=0;idt.Rows.Count;i++){treeView1.Nodes.Add(arry[i].ItemArray[1].ToString());//+(+arry[i].ItemArray[1].ToString()+));treeView1.Nodes[i].Tag=i.ToString();GradeID=arry[i].ItemArray[0].ToString();stringstr_class=select*fromclasseswhereclassgrade=+GradeID;OleDbDataAdapterda_class=newOleDbDataAdapter(str_class,conn);DataSetds_class=newDataSet();da_class.Fill(ds_class,treeNodesCh);DataTabledt_class=ds_class.Tables[treeNodesCh];DataTableReaderdr_class=newDataTableReader(dt_class);//ds_class[treeNodesCh];DataRow[]arry_class=newDataRow[dt_class.Rows.Count];dt_class.Rows.CopyTo(arry_class,0);for(intj=0;jdt_class.Rows.Count;j++){treeView1.Nodes[i].Nodes.Add(arry_class[j].ItemArray[1].ToString());treeView1.Nodes[i].Nodes[j].Tag=i.ToString()+j.ToString();ClassID=arry_class[j].ItemArray[0].ToString();stringstr_student=select*fromstudentswhereclassID=+ClassID;OleDbDataAdapterda_stu=newOleDbDataAdapter(str_student,conn);DataSetds_stu=newDataSet();da_stu.Fill(ds_stu,treeNodesChCh);DataTabledt_stu=ds_stu.Tables[treeNodesChCh];DataTableReaderdr_stu=newDataTableReader(dt_stu);//ds_class[treeNodesCh];DataRow[]arry_stu=newDataRow[dt_stu.Rows.Count];dt_stu.Rows.CopyTo(arry_stu,0);for(intk=0;kdt_stu.Rows.Count;k++){treeView1.Nodes[i].Nodes[j].Nodes.Add(arry_stu[k].ItemArray[1].ToString());treeView1.Nodes[i].Nodes[j].Nodes[k].Tag=i.ToString()+j.ToString()+k.ToString();}}}treeView1.EndUpdate();对于鼠标双击事件,这个有点小技巧,我用的是treeview的MouseDown事件,如何判断根节点,次一级节点和叶子节点,其实上面的代码已经有了:treeView1.Nodes[i].Nodes[j].Tag=i.ToString()+j.ToString();这个就是第二集节点。treeView1.Nodes[i].Nodes[j].Nodes[k].Tag=i.ToString()+j.ToString()+k.ToString();这个是叶子。在MouseDown事件中判断叶子节点是否被选中,只需要判断selectedNode.Tag.ToString().Length的长度是否是3,如果是就是叶子节点,如果不是,就是根或者次一级节点,privatevoidtreeView1_MouseDown(objectsender,MouseEventArgse){if(treeView1.SelectedNode.Tag==null)treeView1.SelectedNode.Tag=fuck;//treeView1.SelectedNode.elseif(treeView1.SelectedNode.Tag.ToString().Length=3){treeView1.SelectedNode.Tag=null;treeView1.SelectedNode=null;btnClicsh=newbtnClic();sh.Show();}}
本文标题:C# treeview添加三层结构,并为叶子节点增加双击事件
链接地址:https://www.777doc.com/doc-7028739 .html