我用的是ms treeview,察看了一下treenode 属性,没有visible这个属性
不知道牛人们怎么解决的,请教,急
不知道牛人们怎么解决的,请教,急
解决方案 »
- 在SQL2005中附加上数据库后怎么是这样??
- vs2005水晶报表问题 急。。。。。
- ajax成功登录后,如果把用户名传到后台session["user"]变量里呢?
- 小游戏网站需求分析
- 我一直接不明白这个怎么会成立(10分)
- .net2005 中使用 NHibernate 的问题
- LoadControl方法加载用户控件时,事件执行两次的问题,请帮忙看看
- 将XML数据读取到DataTable
- 通过web.config里Forms验证,我可否自定义返回路径(ReturnUrl)
- 这里人多,问了win7安装的问题。
- 20分求助~为何我用.net 2003建立asp.net web应用程序时提示web服务器运行的不是asp.net 1.1版本?
- 用Infragistics WebDateTimeEdit 控件时总是报错,哪位大哥会用
然后,在生成树就可以了!
你的办法太死板不行,我有1000个用户,20个权限,每个人访问一次,你给我动态生成一次?我10个人同时访问,你生成谁的???
这句话很有问题,我不知道你怎么理解web的,只要不是同一台客户端机器,就有不同的session值,怎么可能会有所谓的“不知道生成谁的呢”?建议你还是先搞清楚b/s模式。
举例说明,数据库建表如下
树表(TreeID TreeName ParentID )。
权限表(Account, Right)
每个树节点都有一个自己的节点编号,同时有一个父节点编号。每个用户能够访问的树节点权限用一条记录保存他能够访问的节点编号在Right字段中。用户通过Account访问时,通过查找Right字段保存的节点编号,动态生成该权限树。
<ie:TreeView runat="server" SystemImagesPath="/webctrl_client/1_0/treeimages" >
<ie:TreeNode Text="North America" ImageUrl="/webctrl_client/1_0/images/root.gif"
Expanded="true" TreeNodeSrc="state_city.xml" />
</ie:TreeView>
可以把每个子树写成一个xml文件,再根据权限动态装入,没有该权限的就不装入,就可以了
asp.net的treeview和treenode中,没有isvisible 这个属性的
treeview的结构现在文件中写好,这是静态使用treeview的方法。根本没有了解动态生成树控件的原理和方法,当然只有这么理解。
难道你写的C/S都是给每个用户写一个菜单,你的客户需要10种权限,你就写10套系统吗?
“如果是windows应用程序 kenMoxi 的方法当然是正确的,但是对于B/S网页来说,大家访问的是同一”
你还没真正了解b/s模式。但是对于B/S网页来说,大家访问的是同一,虽然是同一,但是用户不一样,生成界面不一样,先了解什么是动态绑定。
树表(TreeID TreeName ParentID )。
1 工资管理 0
2 某部门工资管理 1
3 资料管理 0
。先建成树表 权限表(Account, Right)
admin 1,2,3
xxx 3
每个树节点都有一个自己的节点编号,同时有一个父节点编号。每个用户能够访问的树节点权限用一条记录保存他能够访问的节点编号在Right字段中。用户通过Account访问时,通过查找Right字段保存的节点编号,动态生成该权限树。
如何动态生成树,我想不用多说了,n多资料。
<%@ Page %>
<%@ Register TagPrefix="ie" Namespace="Microsoft.Web.UI.WebControls" Assembly="Microsoft.Web.UI.WebControls" %><html>
<body>
<form runat="server">
<ie:TreeView runat="server">
<ie:TreeNode Text="My first Tree Node">
<ie:TreeNode Text="My second Tree Node" />
</ie:TreeNode>
</ie:TreeView>
</form>
</body>
</html>
我想各位都回答了“动态生成”中”动态“的问题而对“生成”并未回答
http://dev.csdn.net/develop/article/23/23267.shtm
.NET平台下Web树形结构程序设计 选择自 lihonggen0 的 Blog
XML文件,然后把该XML动态绑定到treeview控件上,就可以了。
<ie:TreeView runat="server">
<ie:TreeNode Text="My first Tree Node">
<ie:TreeNode Text="My second Tree Node" />
</ie:TreeNode>
</ie:TreeView>
不过还有一个问题,如果同时几个用户需要将权限目录结构写入A.XML,这个时候就只有一个用户能使用这个文件去绑定TREEVIEW控件,于是其他用户就会看到出错信息(无权访问或访问被拒绝什么的)对吧???这个问题有好的解决方法吗?
如果同时几个用户需要将目录结构写入A.XML,但这个时候只有一个用户能对该XML文件进行写,其他用户必须该用户对A.XML读写完了才能使用该文件进行写操作,于是其他用户就会看到出错信息(无权访问或访问被拒绝什么的)。如何避免这个问题???
回复人: kenMoxi(薪水一点,事儿一堆) (
在数据库里新建一个表,然后将treeView的成员添加在这个表里面,更具不同的权限读取不同的记录
然后,在生成树就可以了!同意kenMoxi(薪水一点,事儿一堆)
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
}
}
如果说编程实现的话,要在.aspx.vb下面编码???
我是说,实现问题的方式是有区别的。
如果说编程实现的话,要在.aspx.vb下面编码???
这句话你是说对了,就是在.aspx.vb下面编码,我的权限设置就是这么实现的。
跟你说说微软的treeview控件吧,它其实就是利用htc控制外观和动作,用XML实现内容更改的。
如果你把服务器上C:\Inetpub\wwwroot\webctrl_client\1_0\treeview.htc文件删掉,就可以从浏览器里面看到一堆连续的文字,这些文字就是你的菜单内容。
编程可以修改tv的node,也就是重建整个tv。============================================
另外,你对B/S结构有个根本性的理解错误,你认为所有用户访问的都是那“一个”页面,所以他们看到的内容就应该是一样的。事实并非如此,在Web服务器上存在一个session的概念,多个用户访问同一个页面,但是他们的状态并不一定相同,由于存在状态的差别,就可以产生不同的观看效果。
比如对于我们现在看到的这个页面,我回复就挂我的名字,你回复就挂你的名字,页面相同,结果不同。
觉得大家在这里讨论很好。。
生成树的代码就要写在.vb或.cs中。用递递归产生树的节点及子节点。。
B/S下每个人的访问如果涉及到权限当然不一样。
不知道 myoldsaturn(saturn)有没有邮箱。不会每个人进入邮箱都是同一个吧。。