winform TreeView的一些用法以及異步加載


今天,主要弄了一下對於樹型控件的一些方法,以及異步加載。
參考:

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 樹的異步加載
        /// <summary>
        /// 載入根節點
        /// </summary>
        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);
                }
            }
        }
        /// <summary>
        /// 載入子節點
        /// </summary>
        /// <param name="node_id"></param>
        /// <param name="node"></param>
        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);
                }
            }
        }
        /// <summary>
        /// 查找父節點的ID
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        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;
        }
    }

以上表結構是從網上摘錄下來的!!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM