用Trewview生成樹:動態的從數據庫中取樹結點
數據庫中生成菜單的表的表結構
如圖:
其中,mnu_xh爲結點的序號,mnu_name爲結點要顯示的文本,mnu_url爲該結點要鏈接的網頁,mnu_fbm爲父結點的序號,
mnu_img爲結點的圖形,mnu_end爲是否是末結點,sqldst.Tables[0]爲所有要在樹上顯示的結點的記錄。
在page第一次加載時調用filltree填充樹的第一級目錄,第一級目錄的父結點爲"0"。
getnode(this.TreeView1,"0"); //得到當前結點
this.TreeView1.Nodes[0].ID="0"; //設置根結點的ID
this.TreeView1.Nodes[0].Text="admin"; //設置根結點顯示的文本
this.TreeView1.Nodes[0].NodeData ="0"; //設置根結點的NadeData
filltree(nodex,"mnu_lb='1' and mnu_fbm='0'","mnu_xh","mnu_name","mnu_url","mnu_img","mnu_lb","mnu_end");
其中mnu_bl,mnu_fbm作爲從數據源中篩選數據的條件,nodex爲當前結點。
filltree作爲填寫充樹的方法,填充當前結點tnc下面的結點。
private void filltree(TreeNode tnc,string strslt,string strcode,string strname,string strurl,string strimg,string strgrade,string strend)
{
DataRow []drs;
drs=sqldst.Tables[0].Select(strslt);//根據strslt對數據源進行有條件的篩選
tnc.Nodes.Clear(); //清除子樹
foreach(DataRow dr in drs)
{
TreeNode rootnode=new TreeNode();
rootnode.ID=GetRowValue(dr,strcode);//將父結點的值作爲該結點的ID
rootnode.Text=GetRowValue(dr,strname);//
rootnode.NavigateUrl =GetRowValue(dr,strurl);
rootnode.ImageUrl =GetRowValue(dr,strimg);
rootnode.ExpandedImageUrl =GetRowValue(dr,strimg);
rootnode.SelectedImageUrl =GetRowValue(dr,strimg);
rootnode.NodeData=GetRowValue(dr,strgrade);
tnc.Nodes.Add(rootnode); //給tnc添加一個結點
if(GetRowValue(dr,strend)=="0")
{
TreeNode tmpnode=new TreeNode(); //添加臨時結點
tnc.Nodes[tnc.Nodes.Count-1].Nodes.Add(tmpnode);
}
}
}
//下面是TreeView的展開事件,展開下級結點。
private void TreeView1_Expand(object sender, Microsoft.Web.UI.WebControls.TreeViewClickEventArgs e)
{
getnode(this.TreeView1,e.Node);
if(this.TreeView1.Enabled==false)
nodex.Expanded=false;
else
{
int jc=int.Parse(nodex.NodeData.ToString())+1;
//填充樹,mnu_lb(NodeData),mnu_fbm(ID)爲條件
filltree(nodex,"mnu_lb='"+jc+"' and mnu_fbm='"+nodeid+"'","mnu_xh","mnu_name","mnu_url","mnu_img","mnu_lb","mnu_end");
}
}
//取出數據庫中對應的值
private string GetRowValue(DataRow dr,String sCol)
{
if((dr.Table.Columns.Contains(sCol)==false) || (dr.IsNull(sCol)))
return "";
else
{
if(dr[sCol].GetType().ToString()=="System.Boolean")
if(dr[sCol].ToString()=="True")
return "1";
else
return "0";
else
return dr[sCol].ToString();
}
}
//取得當前結點
private void getnode(TreeView tv ,string xh)
{
string []id=xh.Split('.');
TreeNode tc=tv.Nodes[0];
for(int i=1;i<id.Length;i++)
{
tc=tc.Nodes[int.Parse(id[i])];
}
nodex=tc; //當前結點
nodeid=tc.ID;//當前編號
}
如圖:
其中,mnu_xh爲結點的序號,mnu_name爲結點要顯示的文本,mnu_url爲該結點要鏈接的網頁,mnu_fbm爲父結點的序號,
mnu_img爲結點的圖形,mnu_end爲是否是末結點,sqldst.Tables[0]爲所有要在樹上顯示的結點的記錄。
在page第一次加載時調用filltree填充樹的第一級目錄,第一級目錄的父結點爲"0"。
getnode(this.TreeView1,"0"); //得到當前結點
this.TreeView1.Nodes[0].ID="0"; //設置根結點的ID
this.TreeView1.Nodes[0].Text="admin"; //設置根結點顯示的文本
this.TreeView1.Nodes[0].NodeData ="0"; //設置根結點的NadeData
filltree(nodex,"mnu_lb='1' and mnu_fbm='0'","mnu_xh","mnu_name","mnu_url","mnu_img","mnu_lb","mnu_end");
其中mnu_bl,mnu_fbm作爲從數據源中篩選數據的條件,nodex爲當前結點。
filltree作爲填寫充樹的方法,填充當前結點tnc下面的結點。
private void filltree(TreeNode tnc,string strslt,string strcode,string strname,string strurl,string strimg,string strgrade,string strend)
{
DataRow []drs;
drs=sqldst.Tables[0].Select(strslt);//根據strslt對數據源進行有條件的篩選
tnc.Nodes.Clear(); //清除子樹
foreach(DataRow dr in drs)
{
TreeNode rootnode=new TreeNode();
rootnode.ID=GetRowValue(dr,strcode);//將父結點的值作爲該結點的ID
rootnode.Text=GetRowValue(dr,strname);//
rootnode.NavigateUrl =GetRowValue(dr,strurl);
rootnode.ImageUrl =GetRowValue(dr,strimg);
rootnode.ExpandedImageUrl =GetRowValue(dr,strimg);
rootnode.SelectedImageUrl =GetRowValue(dr,strimg);
rootnode.NodeData=GetRowValue(dr,strgrade);
tnc.Nodes.Add(rootnode); //給tnc添加一個結點
if(GetRowValue(dr,strend)=="0")
{
TreeNode tmpnode=new TreeNode(); //添加臨時結點
tnc.Nodes[tnc.Nodes.Count-1].Nodes.Add(tmpnode);
}
}
}
//下面是TreeView的展開事件,展開下級結點。
private void TreeView1_Expand(object sender, Microsoft.Web.UI.WebControls.TreeViewClickEventArgs e)
{
getnode(this.TreeView1,e.Node);
if(this.TreeView1.Enabled==false)
nodex.Expanded=false;
else
{
int jc=int.Parse(nodex.NodeData.ToString())+1;
//填充樹,mnu_lb(NodeData),mnu_fbm(ID)爲條件
filltree(nodex,"mnu_lb='"+jc+"' and mnu_fbm='"+nodeid+"'","mnu_xh","mnu_name","mnu_url","mnu_img","mnu_lb","mnu_end");
}
}
//取出數據庫中對應的值
private string GetRowValue(DataRow dr,String sCol)
{
if((dr.Table.Columns.Contains(sCol)==false) || (dr.IsNull(sCol)))
return "";
else
{
if(dr[sCol].GetType().ToString()=="System.Boolean")
if(dr[sCol].ToString()=="True")
return "1";
else
return "0";
else
return dr[sCol].ToString();
}
}
//取得當前結點
private void getnode(TreeView tv ,string xh)
{
string []id=xh.Split('.');
TreeNode tc=tv.Nodes[0];
for(int i=1;i<id.Length;i++)
{
tc=tc.Nodes[int.Parse(id[i])];
}
nodex=tc; //當前結點
nodeid=tc.ID;//當前編號
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.