减小字体
增大字体
前言:这是我第一次用TreeView控件,不足之处请谅解 一:从数据库里读取数据,添加到TreeView里,数据库的设计是这样的 ID ParentID Name 自增值(是唯一的) 上级的ID号(与ID相关) 用于在TreeView显示的名称
private void Page_Load(object sender, System.EventArgs e) { if(!IsPostBack) {InitRootTree(this.TreeView1.Nodes);} } private void InitRootTree(TreeNodeCollection TNC) { DataView dataView=new DataView();//实例化个视图 //ds是DataSet,已经从数据库里读取所有的数据了 dataView=ds.Tables[0].Copy().DefaultView;//将ds填充到视图里 //ParentID是上级节点,由于第一个节点是没有上级节点的,所以我在数据库里把他的上级节点设置为0 dataView.RowFilter = "ParentID = '0'";//读取数据库里ParentID为0的行 foreach(DataRowView drv in dataView) { TreeNode tn=new TreeNode(); tn.ID=drv["ID"].ToString(); tn.Text=drv["Name"].ToString(); TNC.Add(tn);//添加节点 //添加子节点 InitChildNodeTree(tn.Nodes,tn.ID); } ds=null; } private void InitChildNodeTree(TreeNodeCollection TNC,string ParentId) { DataView dataView=new DataView(); dataView=ds.Tables[0].Copy().DefaultView; dataView.RowFilter="ParentID=" + ParentId + ""; foreach(DataRowView drv in dataView) { TreeNode tn=new TreeNode(); tn.ID=drv["ID"].ToString(); tn.Text=drv["Name"].ToString(); TNC.Add(tn); //递归 InitChildNodeTree(tn.Nodes,tn.ID); } }
二:添加节点 //获得选中节点对应的ID号 string NodesID = TreeView1.GetNodeFromIndex(TreeView1.SelectedNodeIndex).ID; //把得到的ID号做为上级节点的ID号,然后执行一个简单的插入操作. string insert = "Insert Into 表名(ParentID,Name)Values(NodesID,新节点)"; SqlCommand sqlcmd = new SqlCommand(insert,sqlcon); sqlcmd.ExecuteNonQuery();
TreeView1.Nodes.Clear();//清空所有的TreeView节点 InitRootTree(this.TreeView1.Nodes);//调用InitRootTree方法重新加栽所有数据
三:删除节点 方法和添加节点方法基本相同,这里就不重复写了. 提示:在用户删除节点时应先判断用户所选中的节点是否有子节点,如果有就应该个用户相应的提示 1:提示用户先把该节点下的子节点先删除 2:提示后,把用户所选中的节点下的所有子节点都删除(需要用递归法) 最后记得调用以下方法,否则显示时可能会出错 TreeView1.Nodes.Clear();//清空所有的TreeView节点 InitRootTree(this.TreeView1.Nodes);//调用InitRootTree方法重新加栽所有数据
四:保持选中节点展开状态 //str是用户所选中的节点,TreeView1.SelectedNodeIndex这样获得 private void openNodes(string str) { string src = null; string len = str.Replace(".",null); for(int i = 0; i < len.Length; i++) { if(i == 0) { src = str.Substring(0,1); } else { src = src + str.Substring(src.Length,2); } TreeView1.GetNodeFromIndex(src).Expanded = true; } } 由于比较简单就没有每一行都加注释了...如果每一行都注释反而觉得罗嗦,而且让大家自己看看、多想想会记得更牢.所谓一样精,百样通
好了就先说到这里,希望大家多多支持,有不懂的地方或者有更好的建议就提出来,大家一起研究研究,一起学习一起进步...
End of《给大家发个TreeView的用法的心得》
|