`
happmaoo
  • 浏览: 4309074 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Asp.net用递归方式显示TreeView Web控件的代码

阅读更多

代码说明:

表T_HG_Catalog的脚本:
CREATE TABLE [T_hg_catalog] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[Catalog_name] [varchar] (30) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[Parent_ID] [int] NULL ,
[Remark] [varchar] (128) COLLATE Chinese_PRC_CI_AS NULL ,
[State] [smallint] NOT NULL CONSTRAINT [DF_T_hg_catalog_State] DEFAULT (0),
CONSTRAINT [PK_t_hg_catalog] PRIMARY KEY CLUSTERED
(
[ID]
) ON [PRIMARY]
) ON [PRIMARY]
GO

其中,一条类别记录如果有上一级类别,则Parent_ID='上级类别ID',如果是最高级,没有上级类别Parent_ID=NULL

CheckPermitFromTable函数是判断当前的登陆用户是否对数上的栏目有权限, 因为系统要求有权限和没权限显示不同的URL.

InitTreeView 函数是整段代码的入口,外部对类的调用,就从这个函数开始.参数我不多说了,自己看得出!

InitTree函数是个递归函数查找当前的类有无下级类别,如果头脑不是很清楚的时候,最好不要看这个函数! :)
     会走火入魔地!

代码执行后的效果:



#region 初始化显示栏目结构的TreeView控件

/// <summary>
/// 检查指定的用户对于该栏目是否有权限,[递归调用]
/// </summary>
/// <param name="pUserID">用户ID</param>
/// <param name="pCatalogID">栏目ID</param>
/// <returns>有权限返回True,没权限返回False</returns>
public bool CheckPermitFromTable(string pUserID,string pCatalogID)
{
try
{

DataRow [] rows = dsTree.Tables["Power"].Select ("Catalog_ID=" + pCatalogID);

if(rows!=null)
{
if(rows.Length>0)
{
return true;
}
else
{
/*
*如果当前栏目没有权限,查询系统中上级栏目是否有权限,
如果有返回True,如果一直查到最高级别栏目还没有操作权限,
则确认用户对于当前栏目没有操作权限. ---王海波
*/
rows=dsTree.Tables["Catalog"].Select ("ID=" + pCatalogID);

if(rows.Length>0 && rows[0]["Parent_ID"].ToString().Trim()!="" )
{
if(CheckPermitFromTable(pUserID,rows[0]["Parent_ID"].ToString())) //[递归调用]
return true;
}

return false;
}
}
else
{
return false;
}
}
catch(SqlException se)
{
ErrorMessage=se.Message;
return false;
}
}


/// <summary>
/// 根据参数获取工作栏的栏目信息
/// </summary>
/// <param name="pParentID">获取当前栏目ID下的所有子栏目,如果pParentID=0,则获取一级栏目信息</param>
/// <param name="pUserID">用户ID</param>
/// <returns>返回DataSet结果集</returns>
public DataSet GetCatalogInfo(int pParentID,string pUserID)
{
try
{
string strSQL,strSQL1;

if(pParentID==0)
{
strSQL="Select * From T_hg_catalog Where State=0 And Parent_ID is NULL Order by ID Asc";
}
else
{
strSQL="Select * From T_hg_catalog Where State=0 Order by ID Asc";
}

strSQL1="Select * From T_hg_Power Where User_ID='"+pUserID+"'";

DataSet ds=new DataSet();

//获取栏目数据
SqlDataAdapter sqlAdpt=new SqlDataAdapter(strSQL,Cn);

sqlAdpt.Fill(ds,"Catalog");


//获取用户栏目权限权限数据
sqlAdpt=new SqlDataAdapter(strSQL1,Cn);
sqlAdpt.Fill(ds,"Power");

return ds;

}
catch(SqlException se)
{
ErrorMessage=se.Message;
return null;
}
}

/// <summary>
/// 初始化TreeView
/// </summary>
/// <param name="tv">TreeView控件</param>
/// <param name="RootImageURL">TreeView控件根节点的图片</param>
/// <param name="pUserID">当前操作用户ID</param>
public void InitTreeView(TreeView tv,string RootImageURL,string pUserID)
{
//初始化第一级Tree Node Start
DataSet ds=GetCatalogInfo(0,pUserID);

tv.Nodes.Clear();
tv.ImageUrl= RootImageURL;

for(int i=0;i<ds.Tables[0].Rows.Count;i++)
{
TreeNode tn1=new TreeNode();

tn1.ImageUrl="/Images/ico01.gif";
tn1.ID="L1-"+i.ToString();
tn1.Text=ds.Tables[0].Rows[i]["ID"].ToString()+"-"+ds.Tables[0].Rows[i]["Catalog_Name"].ToString();

dsTree=GetCatalogInfo(int.Parse(ds.Tables[0].Rows[i]["ID"].ToString()),pUserID);

if(CheckPermitFromTable(pUserID,ds.Tables[0].Rows[i]["ID"].ToString()))
tn1.NavigateUrl="/Admin/HG_Info_Manage.aspx?CID="+ds.Tables[0].Rows[i]["ID"].ToString()+"&CatalogName="+ds.Tables[0].Rows[i]["Catalog_Name"].ToString();
else
tn1.NavigateUrl="/Info/T_Info_Index.aspx?CID="+ds.Tables[0].Rows[i]["ID"].ToString()+"&CatalogName="+ds.Tables[0].Rows[i]["Catalog_Name"].ToString();

tn1.Expanded=true;

tv.Nodes.Add(tn1);

InitTree(tv.Nodes[i].Nodes,ds.Tables[0].Rows[i]["ID"].ToString(),pUserID);

pLevel=0; //树的层还原

}
//初始化第一级Tree Node End

//初始化填充TreeView的DataSet

}

/// <summary>
/// 递归调用该函数进行树的显示
/// </summary>
/// <param name="Nds">树的节点</param>
/// <param name="parentId">上级栏目的ID</param>
/// <param name="pUserID">当前操作用户ID</param>
private void InitTree(TreeNodeCollection Nds,string parentId,string pUserID)
{
DataView dv=new DataView();

TreeNode tmpNd;

string intId;

dv.Table=dsTree.Tables[0];

DataRow [] rows = dv.Table.Select ("Parent_Id=" + parentId);

pLevel++; //树的层加1

int pCurLevel=pLevel;

for(int i=0;i<rows.Length;i++)
{
DataRow drv=rows[i];

tmpNd=new TreeNode();

tmpNd.ID=drv["ID"].ToString();
tmpNd.Text=drv["ID"].ToString()+"-"+drv["Catalog_Name"].ToString();

//改变数层图标
switch(pLevel)
{
case 1:
tmpNd.ImageUrl="/images/fling.gif";
break;

case 2:
tmpNd.ImageUrl="/images/ico03.gif";
break;

case 3:
tmpNd.ImageUrl="/images/state_normal.gif";
break;

}

if(CheckPermitFromTable(pUserID,drv["ID"].ToString()))
tmpNd.NavigateUrl="/Admin/HG_Info_Manage.aspx?CID="+drv["ID"].ToString()+"&CatalogName="+drv["Catalog_Name"].ToString();
else
tmpNd.NavigateUrl="/Info/HG_Info_Index.aspx?CID="+drv["ID"].ToString()+"&CatalogName="+drv["Catalog_Name"].ToString();

Nds.Add(tmpNd);

intId=drv["Parent_Id"].ToString();

InitTree(tmpNd.Nodes,tmpNd.ID,pUserID);

pLevel=pCurLevel;

}

}


#endregion


分享到:
评论

相关推荐

    ASP.NET-Treeview-递归生成部门树

    这是一个学习ASP.NET treeview控件的demo,通过递归生成一棵部门树。部门表结构在解决方案中。解压密码: 1435279215

    ASP.NET基础控件-教程

     Asp.Net中WebServices的使用  Asp.net手动绑定数据(分页、编辑、删除、加控件等操作)  Asp.net中My97DatePicker4.2日期的使用  Asp.net中DataList控件添加删除  Asp.net获取请求的用户信息IP地址  获取世界IP...

    论文研究-ASP.NET 2.0中TreeView控件在物价局收费管理系统中的应用 .pdf

    ASP.NET 2.0中TreeView控件在物价局收费管理系统中的应用,佘安强,,针对物价局收费管理系统中收费项目库的要求和特点,提出了一种利用TreeView控件解决收费项目树状列表显示问题的方法。利用递归算法�

    asp.net开发常用整理集合

     Asp.Net中WebServices的使用  Asp.net手动绑定数据(分页、编辑、删除、加控件等操作)  Asp.net中My97DatePicker4.2日期的使用  Asp.net中DataList控件添加删除  Asp.net获取请求的用户信息IP地址  获取...

    使用TreeView控件设计OA办公系统的导航

    从根节点递归调用填充TreeView控件。ASP.NET vs2005,sql2005

    控件treeview绑定数据

    asp.net 里用递归的方法往treeview绑定数据源

    asp.net实现DropDownList,TreeView,ListBox的无限极分类目录树

    本文实例讲述了asp.net实现DropDownList,TreeView,ListBox的无限极分类目录树。分享给大家供大家参考,具体如下: #region DropDownList无限递归显示层次关系 /// /// 创建无限分级下拉列表框 /// /// 下拉控件 /...

    ASP.NET权限管理系统

    所需工具:vs2008 sql2005(不明白加我qq623932737) 五张表设计 用户表 菜单表 角色表 角色用户关联表 角色菜单关联 ...3、登录时根据用户id查询出其菜单 在递归绑定到treeview控件中 希望对你有帮助

    递归输出ASP.NET页面所有控件的类型和ID的代码

    写一个方法: 代码如下: private void DisplayAllControl(Control control, int step) { foreach (Control ctl in control.Controls) { string s = new string(‘-‘, step * 4) + ctl.GetType().Name + “〈” + ...

    C#编程经验技巧宝典

    111 &lt;br&gt;0184 如何在ASP.NET中获取文件的扩展名 111 &lt;br&gt;0185 如何在ASP.NET中用URL在页面之间传值 112 &lt;br&gt;0186 如何使用IsPostBack实现ASP.NET页面加载 112 &lt;br&gt;0187 如何利用输出缓存技术缓存...

Global site tag (gtag.js) - Google Analytics