数据库中生成菜单的表的表结构
如图:
其中,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;//当前编号
}