TreeView 后台加载

来源:互联网 发布:文章发布系统源码 编辑:程序博客网 时间:2024/05/22 17:34

TreeView控件是.NET自带的一个树形菜单控件,使用非常简单。
论坛里有朋友问到了如何通过后台动态加载TreeView,手头正好刚写完一个,顺便贴出来。
不好的地方大家见谅!

应用表结构:

比如一个TreeView的样子是下边的:
仓库
   ¦--添加仓库
   ¦--编辑仓库
财务
   ¦--入账
   ¦--出帐
查询

那么MenuTitle表保存的就是"仓库,财务,查询"这些根节点
MenuDetail保存的就是"添加仓库,编辑仓库,入账,出帐"这些子节点
它们之间用ID关联
MenuTitle表的结构:
ID{主键}
Title{主节点名称}
MenuDetail表的结构:
Did{主键}
ID{外键}
DTitle{子节点名称}

读取想要加载到TreeView的菜单项目 
private void GetDataSet() 
    

        
try 
        

            
string constr = System.Configuration.ConfigurationManager.ConnectionStrings["LocalSqlServer"].ConnectionString; 
            SqlConnection conn 
= new SqlConnection(constr); 
            conn.Open(); 
            
string comstr = "Select * from MenuTitle"
            SqlDataAdapter sda 
= new SqlDataAdapter(comstr, conn); 
            sda.Fill(ds, 
"table1"); 
            comstr 
= "Select * from MenuDetail"
            sda 
= new SqlDataAdapter(comstr, conn); 
            sda.Fill(ds, 
"table2"); 
            conn.Close(); 
        }
 
        
catch (Exception ex) 
        

            Console.Write(
"读取菜单错误"); 
        }
 
    }
 

加载根节点 
    
private void initRoot(TreeView tnd) 
    

        
try 
        

            DataView dv 
= new DataView(); 
            TreeNode tmpnd; 
            dv.Table 
= ds.Tables["table1"]; 
            
foreach (DataRowView drv in dv) 
            

                tmpnd 
= new TreeNode(); 
                tmpnd.Value 
= drv["ID"].ToString(); 
                tmpnd.Text 
= drv["Title"].ToString(); 
                tnd.Nodes.Add(tmpnd); 
                tmpnd.PopulateOnDemand 
= true
                tmpnd.SelectAction 
= TreeNodeSelectAction.Expand; 
            }
 
        }
 
        
catch (Exception ex) 
        

            Console.Write(
"读取根节点错误"); 
        }
 
    }
 

加载子节点 
    
private void AddChildNodes(TreeNode nds) 
    

        
try 
        

            DataView dv 
= new DataView(); 
            TreeNode tmpnd; 
            dv.Table 
= ds.Tables["table2"]; 
            dv.RowFilter 
= "ID=" + nds.Value.ToString() + ""
            
foreach (DataRowView drv in dv) 
            

                tmpnd 
= new TreeNode(); 
                tmpnd.Value 
= drv["Did"].ToString(); 
                tmpnd.Text 
= drv["DTitle"].ToString(); 
                nds.ChildNodes.Add(tmpnd); 
                tmpnd.PopulateOnDemand 
= true
                
if (nds.ChildNodes.Count != 0
                

                    tmpnd.SelectAction 
= TreeNodeSelectAction.Expand; 
                }
 
            }
 
        }
 
        
catch (Exception ex) 
        

            Console.Write(
"读取子节点错误"); 
        }
 
    }
 


在Page_Load里遍历一下 

GetDataSet(); 
initRoot(TreeView1) 
foreach(TreeNode tn in TreeView1.Nodes) 

AddChildNodes(tn); 
}
 
}
 
 
原创粉丝点击