博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
winform TreeView的一些用法以及异步加载
阅读量:6209 次
发布时间:2019-06-21

本文共 5303 字,大约阅读时间需要 17 分钟。

今天,主要弄了一下对于树型控件的一些方法,以及异步加载。

参考:

http://www.cnblogs.com/greatverve/archive/2012/03/23/winform-treeview.html

下面是TreeView的一些用法

private void BindTreeView(){    treeView1.LabelEdit = false;//不可编辑    //添加结点    TreeNode root = new TreeNode();    root.Text = "根节点";    //一级    TreeNode node1 = new TreeNode();    node1.Text = "1";    TreeNode node2 = new TreeNode();    node2.Text = "2";    //二级    TreeNode node11 = new TreeNode();    node11.Text = "11";    TreeNode node12 = new TreeNode();    node12.Text = "12";    TreeNode node21 = new TreeNode();    node21.Text = "21";    TreeNode node22 = new TreeNode();    node22.Text = "22";    //二级加入一级    node1.Nodes.Add(node11);    node1.Nodes.Add(node12);    node2.Nodes.Add(node21);    node2.Nodes.Add(node22);    //一级加入根    root.Nodes.Add(node1);    root.Nodes.Add(node2);    //    treeView1.Nodes.Add(root);}private void treeView1_AfterSelect(object sender, TreeViewEventArgs e){    if (treeView1.SelectedNode != null)    {        MessageBox.Show(treeView1.SelectedNode.Text);    }}

基本用法有了,下面,就把我写的异步加载列表的方法写进去了,因为是参考网上的方法临时 写的,可能会有些不足之处,也有可以改进,优化的一些方法

DataTable dt = data.createDT();        #region 树的异步加载        ///         /// 载入根节点        ///         public void make_rootView()        {            foreach (DataRow row in dt.Select("module_fatherid='M01'"))            {                TreeNode tn = new TreeNode();                string sk=row["module_id"].ToString();                tn.Text = row["module_name"].ToString();                treeView1.Nodes.Add(tn);                DataRow[] row2=(dt.Select("module_fatherid='" + sk + "'"));                if (row2.Count()!=0)                {                                        TreeNode tn1 = new TreeNode();                    tn1.Text = "";                    tn.Nodes.Add(tn1);                }            }        }        ///         /// 载入子节点        ///         ///         ///         public void make_view(string node_id,TreeNode node)        {            node.Nodes.Clear();            foreach (DataRow row in dt.Select("module_fatherid='"+node_id+"'"))            {                TreeNode tn = new TreeNode();                string sk = row["module_id"].ToString();                tn.Text = row["module_name"].ToString();                node.Nodes.Add(tn);                if ((dt.Select("module_fatherid='" + sk + "'")).Count() != 0)                {                    TreeNode tn1 = new TreeNode();                    tn1.Text = "";                    tn.Nodes.Add(tn1);                }            }        }        ///         /// 查找父节点的ID        ///         ///         ///         public void make_NodeView(object sender, TreeViewCancelEventArgs e)        {            TreeNode tn = e.Node;            string node_id = "";            foreach (DataRow row in dt.Select("module_name='" + tn.Text + "'"))            {                node_id = row["module_id"].ToString();            }            make_view(node_id, tn);        }        #endregion        private void treeView1_BeforeExpand(object sender, TreeViewCancelEventArgs e)        {            make_NodeView(sender, e);                    }

在刚载入时调用 

private void Form1_Load(object sender, EventArgs e)        {           make_rootView();   }

在树型控件的事件treeView1_BeforeExpand调用 

private void treeView1_BeforeExpand(object sender, TreeViewCancelEventArgs e)        { make_NodeView(sender, e);   }

下面是我的数据源,我是根据下面这个表格的结构来写代码 ,根据结构的不一样,代码 也应做相应的改变

public class data    {        public static DataTable createDT()        {            DataTable dt = new DataTable();            dt.Columns.Add("module_id");            dt.Columns.Add("module_name");            dt.Columns.Add("module_fatherid");            dt.Columns.Add("module_url");            dt.Columns.Add("module_order");            dt.Rows.Add("C1", "全国", "0", "", "1");            dt.Rows.Add("M01", "广东", "C1", "", "1");            dt.Rows.Add("M0101", "深圳", "M01", "", "100");            dt.Rows.Add("M010101", "南山区", "M0101", "", "1000");            dt.Rows.Add("M010102", "罗湖区", "M0101", "", "1001");            dt.Rows.Add("M010103", "福田区", "M0101", "", "1002");            dt.Rows.Add("M010104", "宝安区", "M0101", "", "1003");            dt.Rows.Add("M010105", "龙岗区", "M0101", "", "1004");            dt.Rows.Add("M01010301", "上梅林", "M010103", "", "1002001");            dt.Rows.Add("M01010302", "下梅林", "M010103", "", "1002002");            dt.Rows.Add("M01010303", "车公庙", "M010103", "", "1002003");            dt.Rows.Add("M01010304", "竹子林", "M010103", "", "1002004");            dt.Rows.Add("M01010305", "八卦岭", "M010103", "", "1002005");            dt.Rows.Add("M01010306", "华强北", "M010103", "", "1002006");            dt.Rows.Add("M0102", "广州", "M01", "", "101");            dt.Rows.Add("M010201", "越秀区", "M0102", "", "1105");            dt.Rows.Add("M010202", "海珠区", "M0102", "", "1106");            dt.Rows.Add("M010203", "天河区", "M0102", "", "1107");            dt.Rows.Add("M010204", "白云区", "M0102", "", "1108");            dt.Rows.Add("M010205", "黄埔区", "M0102", "", "1109");            dt.Rows.Add("M010206", "荔湾区", "M0102", "", "1110");            dt.Rows.Add("M010207", "罗岗区", "M0102", "", "1111");            dt.Rows.Add("M010208", "南沙区", "M0102", "", "1112");            return dt;        }    }

以上表结构是从网上摘录下来的!!!

转载于:https://www.cnblogs.com/chcong/p/4341041.html

你可能感兴趣的文章
Android Studio报Error:Execution failed for task
查看>>
java程序流程控制语句--其它控制语句
查看>>
Sencha Touch 小细节之----改变Ajax的请求方式(POST/GET)和添加请求参数
查看>>
还原精灵还原了mysql怎么办
查看>>
ViewHolder另一种完法
查看>>
MyISAM InnoDB 区别
查看>>
NFC标签的一些事
查看>>
java虚拟机学习(二)java对象的创建及访问定位
查看>>
字符串的排列组合问题--
查看>>
关于Java ThreadLocal
查看>>
使用iscroll
查看>>
MY域名,什么是MY域名?
查看>>
第二十天:expand
查看>>
coreData
查看>>
使用Matrix对象旋转和缩放图像
查看>>
JS 固定图片背景
查看>>
PreparedStatement
查看>>
错误: ‘EOF’在此作用域中尚未声明
查看>>
ajax跨域提交
查看>>
try_catch_finally的注意事项
查看>>