在TreeView中怎么才能让某个(几个)TreeNode根据用户权限显示或隐藏了?

greatdreamworld 2004-08-10 02:57:02
我用的是ms treeview,察看了一下treenode 属性,没有visible这个属性
不知道牛人们怎么解决的,请教,急
...全文
992 52 打赏 收藏 转发到动态 举报
写回复
用AI写文章
52 条回复
切换为时间正序
请发表友善的回复…
发表回复
czhenq 2004-10-22
  • 打赏
  • 举报
回复
关于权限树的问题可以看看“三楼楼长”共享的OA里的内容。

做的不错。
xzq686 2004-10-22
  • 打赏
  • 举报
回复
楼上的说的好。
觉得大家在这里讨论很好。。
生成树的代码就要写在.vb或.cs中。用递递归产生树的节点及子节点。。
B/S下每个人的访问如果涉及到权限当然不一样。
不知道 myoldsaturn(saturn)有没有邮箱。不会每个人进入邮箱都是同一个吧。。
qiangsheng 2004-10-22
  • 打赏
  • 举报
回复
回复人: myoldsaturn(saturn) ( ) 信誉:100 2004-10-22 16:42:00 得分: 0

我是说,实现问题的方式是有区别的。
如果说编程实现的话,要在.aspx.vb下面编码???

这句话你是说对了,就是在.aspx.vb下面编码,我的权限设置就是这么实现的。
跟你说说微软的treeview控件吧,它其实就是利用htc控制外观和动作,用XML实现内容更改的。
如果你把服务器上C:\Inetpub\wwwroot\webctrl_client\1_0\treeview.htc文件删掉,就可以从浏览器里面看到一堆连续的文字,这些文字就是你的菜单内容。
编程可以修改tv的node,也就是重建整个tv。

============================================
另外,你对B/S结构有个根本性的理解错误,你认为所有用户访问的都是那“一个”页面,所以他们看到的内容就应该是一样的。事实并非如此,在Web服务器上存在一个session的概念,多个用户访问同一个页面,但是他们的状态并不一定相同,由于存在状态的差别,就可以产生不同的观看效果。
比如对于我们现在看到的这个页面,我回复就挂我的名字,你回复就挂你的名字,页面相同,结果不同。
killerliu 2004-10-22
  • 打赏
  • 举报
回复
呵呵,主要是有的同志对web的理解有问题,对asp.net不理解,所以会让一个20分的帖子出现跟贴49的可能。。。
huke1980 2004-10-22
  • 打赏
  • 举报
回复
好像没有人在讨论B/S和C/S的优劣吧
噯卟釋手 2004-10-22
  • 打赏
  • 举报
回复
唉 本来是讨论技术问题 现在转到比较B/S和C/S的优劣上去了
huke1980 2004-10-22
  • 打赏
  • 举报
回复
当然要编码了
myoldsaturn 2004-10-22
  • 打赏
  • 举报
回复
我是说,实现问题的方式是有区别的。
如果说编程实现的话,要在.aspx.vb下面编码???
morality 2004-10-22
  • 打赏
  • 举报
回复
给你一段代码供参考:

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using System.Configuration;
using Microsoft.Web.UI.WebControls;

namespace NCMT
{
/// <summary>
/// NavigationIn 的摘要说明。
/// </summary>
public class NavigationIn : System.Web.UI.Page
{
protected Microsoft.Web.UI.WebControls.TreeView tvwNaviIn;

protected SqlConnection conn;
protected SqlDataAdapter apt;
protected DataSet ds;
protected string strSql;

private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if(!Page.IsPostBack)
{
if(Session["UserID"] == null || Session["UserID"].ToString() == "" || Session["UserID"].ToString() == String.Empty)
{
Response.Write("<script language=javascript>window.top.location.href='../login.aspx'</script>");
}

string sConn = ConfigurationSettings.AppSettings["NCMT"];
conn = new SqlConnection(sConn);

CreateDataSet();
InitNavigationTree(tvwNaviIn.Nodes,"0");
}
}


//创建数据集
private DataSet CreateDataSet()
{
strSql = "Select Distinct a.ID,a.F_NodeID,a.F_NodeName,a.F_ParentID,a.F_NavigateUrl,a.F_ImageUrl,a.F_OutOrIn From T_Function a,T_Role b,T_UserToRole c,T_RoleToFunc d Where c.F_UserID = '" + Session["UserID"].ToString() + "' And b.F_RoleID = c.F_RoleID And b.F_RoleID = d.F_RoleID And a.F_NodeID = d.F_FuncID Order By a.ID";

apt = new SqlDataAdapter(strSql,conn);
ds = new DataSet();
apt.Fill(ds,"dtNavigateIn");
return ds;
}

//初始化导航树,通过递归调用显示子树
private void InitNavigationTree(TreeNodeCollection tncCurrent,string sParentID)
{
DataView dvw = new DataView();
TreeNode nodTemp;
string strTempID;
dvw.Table = ds.Tables["dtNavigateIn"];
dvw.RowFilter = "F_ParentID = '" + sParentID + "'";
foreach(DataRowView drv in dvw)
{
nodTemp = new TreeNode();
nodTemp.ID = drv["F_NodeID"].ToString();
nodTemp.Text = drv["F_NodeName"].ToString();
nodTemp.NavigateUrl = drv["F_NavigateUrl"].ToString();
nodTemp.ImageUrl = drv["F_ImageUrl"].ToString();
nodTemp.Target = "MainIn";

tncCurrent.Add(nodTemp);
strTempID = drv["F_ParentID"].ToString();
//递归调用
InitNavigationTree(nodTemp.Nodes,nodTemp.ID);
}
}


#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion
}
}
huke1980 2004-10-22
  • 打赏
  • 举报
回复
没语言了!
myoldsaturn 2004-10-22
  • 打赏
  • 举报
回复
楼上的,我觉得你这个方法对于ASPX是不行的,对于 其他的vb.net/vc.net等可以
killerliu 2004-10-22
  • 打赏
  • 举报
回复
是楼上的楼上,
killerliu 2004-10-22
  • 打赏
  • 举报
回复
我倒。。。楼上的难道不知道aspx和aspx.vb 或者 aspx.cs文件都是用vb.net 或者c#写出来的吗?难道你认为aspx是一门开发语言吗?天啊。。。无语
huke1980 2004-10-22
  • 打赏
  • 举报
回复
笑话,我现在就是这么做的,不会可以,不要说不行!
myoldsaturn 2004-10-22
  • 打赏
  • 举报
回复
楼上的,我觉得你这个方法对于ASPX是不行的,对于 其他的vb.net/vc.net等可以
huke1980 2004-10-22
  • 打赏
  • 举报
回复
楼上的,用程序呀,用代码,不要用什么xml文件绑定了,在数据库里面通过权限读出他能加载的节点表,在通过代码做个循环加到树形控件不就得了,难道你就只会绑定,不会用代码?
9728 2004-10-22
  • 打赏
  • 举报
回复

回复人: kenMoxi(薪水一点,事儿一堆) (
在数据库里新建一个表,然后将treeView的成员添加在这个表里面,更具不同的权限读取不同的记录
然后,在生成树就可以了!

同意kenMoxi(薪水一点,事儿一堆)
myoldsaturn 2004-10-22
  • 打赏
  • 举报
回复
我对这个问题还想问问有没有其他解决方案:
如果同时几个用户需要将目录结构写入A.XML,但这个时候只有一个用户能对该XML文件进行写,其他用户必须该用户对A.XML读写完了才能使用该文件进行写操作,于是其他用户就会看到出错信息(无权访问或访问被拒绝什么的)。如何避免这个问题???
myoldsaturn 2004-10-22
  • 打赏
  • 举报
回复
权限记录是在数据库中,我们就是将可以访问的表名组合成一个treeview和treenode写成的树写人xml,再绑定上树控件,难道你绑定绑定树不用xml文件吗?有其他的途径吗?
myoldsaturn 2004-10-22
  • 打赏
  • 举报
回复
楼上的,你说的方法在ASPX中好像行不通啊
加载更多回复(32)

62,051

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧