TreeView和Menu关于数据库递归的用法

TreeView和Menu关于数据库递归的用法

TreeView和Menu都是用于导航,且与数据库绑定时的用法也极为相近,下面给出两个实例,请比较业务层的绑定方法。

1. Tree.aspx
<% @ Page Language="C#" AutoEventWireup="true" CodeFile="Tree.aspx.cs" Inherits="NavTree"
    EnableViewState
="false" 
%>
<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
< html  xmlns ="http://www.w3.org/1999/xhtml" >
< head  runat ="server" >
    
< title > LeftMenu_Tree </ title >
</ head >
< body  bgcolor ="#DDEDFD" >
    
< form  id ="form1"  runat ="server" >
        
< asp:LinkButton  ID ="lbtExpand"  runat ="server"  OnClick ="lbtExpand_Click"  ToolTip ="全部展开" >
             全部展开
        
</ asp:LinkButton >
        
< asp:LinkButton  ID ="lbtCollapse"  runat ="server"  OnClick ="lbtCollapse_Click"  Visible ="false" >
             全部收缩
        
</ asp:LinkButton >
        
< asp:TreeView  ID ="tvMenu"  SkinID ="tvClass"  runat ="server"  ShowLines ="true"  NodeWrap ="false" >
        
</ asp:TreeView >
    
</ form >
</ body >
</ html >


2. Tree.aspx.cs

using  System;
using  System.Data;
using  System.Data.SqlClient;
using  System.Configuration;
using  System.Collections;
using  System.Web;
using  System.Web.Security;
using  System.Web.UI;
using  System.Web.UI.WebControls;
using  System.Web.UI.WebControls.WebParts;
using  System.Web.UI.HtmlControls;
public  partial  class  NavTree : System.Web.UI.Page
{
    Sys.BLL.Navigation myBiz 
= new Sys.BLL.Navigation();
    
private void Page_Load(object sender, System.EventArgs e)
    
{
        
if (!Page.IsPostBack)
        
{
            BindTree();
        }

    }


    
protected void BindTree()
    
{
        
//根据当前用户ID加载目录树
        myBiz.BindTree(tvMenu, Framework.Globals.CurrentUser.UserID);
    }


    
//全部展开节点
    protected void lbtExpand_Click(object sender, EventArgs e)
    
{
        tvMenu.ExpandAll();
        lbtExpand.Visible 
= false;
        lbtCollapse.Visible 
= true;
    }


    
//全部折叠节点
    protected void lbtCollapse_Click(object sender, EventArgs e)
    
{
        tvMenu.CollapseAll();
        lbtExpand.Visible 
= true;
        lbtCollapse.Visible 
= false;
    }

}


3. Menu.aspx

<% @ Page Language="C#" AutoEventWireup="true" CodeFile="Menu.aspx.cs" Inherits="NavMenu"  %>
<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
< html  xmlns ="http://www.w3.org/1999/xhtml" >
< head  runat ="server" >
    
< title > Top </ title >
</ head >
< body >
    
< form  id ="form1"  runat ="server" >
        
< asp:Menu  ID ="Menu1"  runat ="server"  BackColor ="#f1f1f1"  ForeColor ="Black"  Font-Size ="12px"
            Font-Names
="宋体"  BorderColor ="background"  BorderStyle ="Solid"  BorderWidth ="0px"
            StaticSubMenuIndent
="10px"  Height ="20px"  Orientation ="Horizontal"  StaticEnableDefaultPopOutImage ="False" >
            
< StaticMenuItemStyle  HorizontalPadding ="5px"  VerticalPadding ="2px"  BorderWidth ="1px"
                BorderColor
="#f1f1f1"   />
            
< StaticHoverStyle  BackColor ="#cccccc"  BorderColor ="background"  BorderStyle ="Solid"
                BorderWidth
="1px"   />
            
< DynamicHoverStyle  BackColor ="#C6DDFE"  BorderColor ="background"  BorderStyle ="Solid"
                BorderWidth
="0px"   />
            
< DynamicMenuStyle  BackColor ="Menu"  BorderStyle ="Outset"  BorderWidth ="1px"  HorizontalPadding ="2px"
                VerticalPadding
="0px"  BorderColor ="MenuBar"   />
            
< DynamicMenuItemStyle  HorizontalPadding ="2px"  VerticalPadding ="2px"   />
        
</ asp:Menu >
    
</ form >
</ body >
</ html >


4. Menu.aspx.cs

using  System;
using  System.Data;
using  System.Configuration;
using  System.Collections;
using  System.Web;
using  System.Web.Security;
using  System.Web.UI;
using  System.Web.UI.WebControls;
using  System.Web.UI.WebControls.WebParts;
using  System.Web.UI.HtmlControls;
public  partial  class  NavMenu : System.Web.UI.Page
{
    Sys.BLL.Navigation myBiz 
= new Sys.BLL.Navigation();
    
protected void Page_Load(object sender, EventArgs e)
    
{
        
if (!Page.IsPostBack)
        
{
            myBiz.BindMenu(Menu1);
        }

    }

}


5. 业务层:App_Code/Sys.BLL.Navigation.cs

 

 

using  System;
using  System.Data;
using  System.Configuration;
using  System.Web;
using  System.Web.Security;
using  System.Web.UI;
using  System.Web.UI.WebControls;
using  System.Web.UI.WebControls.WebParts;
using  System.Web.UI.HtmlControls;
namespace  Sys.BLL
{
    
/// <summary>
    
/// 系统导航 业务层
    
/// </summary>

    public class Navigation : Framework.BLL.BizObject
    
{
        
#region 变量 构造函数
        Sys.DAL.Navigation myData 
= new Sys.DAL.Navigation();
        
string ImagePath = Framework.Globals.WebRoot + "Images/";

        
/// <summary>
        
/// 系统导航 
        
/// </summary>

        public Navigation()
        
{ }
        
#endregion


        
#region 目录树(TreeView)
        DataTable ds_TreeView;
        
/// <summary>
        
/// 根据当前用户ID加载目录树
        
/// </summary>

        public void BindTree(TreeView tvMenu, int userID)
        
{
            ds_TreeView 
= myData.BindTree(userID).Tables[0];
            
if (ds_TreeView.Rows.Count > 0)
                BindTree(tvMenu, 
0, (TreeNode)null);
        }


        
private void BindTree(TreeView tvMenu, int ParentID, TreeNode pNode)
        
{
            
string NodeId = "MenuID";
            
string NodeName = "MenuName";
            
string ParentId = "ParentID";
            
string Url = "Url";
            
string Icon = "Icon";

            DataView dvTree 
= new DataView(ds_TreeView);
            
//过滤ParentId,得到当前的所有子节点
            dvTree.RowFilter = ParentId + " = " + ParentID;

            
foreach (DataRowView drv in dvTree)
            
{
                TreeNode Node 
= new TreeNode();

                
if (pNode == null)
                
{   //添加根节点
                    string nodename = drv[NodeName].ToString().Trim();
                    
string nodeid = drv[NodeId].ToString().Trim();

                    Node.Text 
= nodename;
                    Node.ToolTip 
= nodename;
                    Node.Value 
= nodeid;
                    Node.Target 
= "main";

                    
if (drv[Icon].ToString().Trim() == string.Empty)
                    
{ Node.ImageUrl = ImagePath + "menu/ie.gif"; }
                    
else
                    
{ Node.ImageUrl = ImagePath + "menu/" + drv[Icon].ToString().Trim(); }

                    
//导航模式  &   选择模式
                    
//要使一个节点处于导航模式,请将该节点的 NavigateUrl 属性值设置为空字符串 ("") 以外的值
                    
//若要使节点处于选择模式,请将节点的 NavigateUrl 属性设置为空字符串。
                    Node.NavigateUrl = "";
                    Node.SelectAction 
= TreeNodeSelectAction.Expand;
                    Node.Expanded 
= false;
                    Node.PopulateOnDemand 
= false;

                    tvMenu.Nodes.Add(Node);       
//***注意区别:根节点
                    BindTree(null, Int32.Parse(nodeid), Node);    //再次递归
                }

                
else
                
{   //?添加当前节点的子节点
                    string nodename = drv[NodeName].ToString().Trim();
                    
string nodeid = drv[NodeId].ToString().Trim();

                    Node.Text 
= nodename;
                    Node.ToolTip 
= nodename;
                    Node.Value 
= nodeid;
                    Node.Target 
= "main";

                    
if (drv[Icon].ToString().Trim() == string.Empty)
                    
{ Node.ImageUrl = ImagePath + "menu/ie.gif"; }//默认图标
                    else
                    
{ Node.ImageUrl = ImagePath + "menu/" + drv[Icon].ToString().Trim(); }

                    Node.NavigateUrl 
= drv[Url].ToString();
                    Node.SelectAction 
= TreeNodeSelectAction.Expand;
                    Node.Expanded 
= false;
                    Node.PopulateOnDemand 
= false;

                    pNode.ChildNodes.Add(Node);     
//***注意区别:子节点
                    BindTree(null, Int32.Parse(nodeid), Node);     //再次递归
                }

            }

        }

        
#endregion


        
#region 导航菜单(Menu)
        DataTable ds_BindMenu;
        
/// <summary>
        
/// 加载获取导航菜单
        
/// </summary>

        public void BindMenu(Menu tvMenu)
        
{
            ds_BindMenu 
= myData.BindMenu().Tables[0];
            
if (ds_BindMenu.Rows.Count > 0)
                BindMenu(tvMenu, 
0, (MenuItem)null);
        }

        
/// <summary>
        
/// 加载获取导航菜单
        
/// </summary>

        private void BindMenu(Menu tvMenu, int ParentID, MenuItem pNode)
        
{
            DataView dvTree 
= new DataView(ds_BindMenu);
            dvTree.RowFilter 
= "ParentId =" + ParentID;//过滤ParentId,得到当前的所有子节点
            foreach (DataRowView drv in dvTree)
            
{
                
int id = Convert.ToInt32(drv["ID"]);
                
int parentID = Convert.ToInt32(drv["ParentID"]);
                
string text = drv["Text"].ToString();
                
string value = drv["Value"== DBNull.Value ? string.Empty : drv["Value"].ToString();
                
string imageUrl = drv["ImageUrl"== DBNull.Value ? string.Empty : drv["ImageUrl"].ToString();
                
string navigateUrl = drv["NavigateUrl"== DBNull.Value ? string.Empty : drv["NavigateUrl"].ToString();
                
string target = drv["Target"== DBNull.Value ? string.Empty : drv["Target"].ToString();

                MenuItem item 
= new MenuItem();
                
if (pNode == null)
                
{   //添加根节点
                    item.Text = text;
                    item.Value 
= value;
                    item.Target 
= target;

                    
if (imageUrl == string.Empty)
                    
{
                        item.ImageUrl 
= ImagePath + "winXP/winxp_folder.gif";
                    }

                    
else
                    
{
                        item.ImageUrl 
= imageUrl;
                    }

                    item.NavigateUrl 
= navigateUrl;
                    item.Selectable 
= true;

                    tvMenu.Items.Add(item);       
//***注意区别:根节点
                    BindMenu(null, id, item);    //再次递归

                }
//检索
                else
                
{   //?添加当前节点的子节点
                    item.Text = text;
                    item.Value 
= value;
                    item.Target 
= target;

                    
if (imageUrl == string.Empty)
                    
{
                        item.ImageUrl 
= ImagePath + "winXP/winxp_folder.gif";
                    }

                    
else
                    
{
                        item.ImageUrl 
= imageUrl;
                    }

                    item.NavigateUrl 
= navigateUrl;
                    item.Selectable 
= true;

                    pNode.ChildItems.Add(item);     
//***注意区别:子节点
                    BindMenu(null, id, item);     //再次递归
                }

            }

        }

        
#endregion

    }
//class end
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值