MzTreeView(梅花雪)完全攻略

最近因公司需求,奉命在公司网站的后台加个权限控制的模块。因为早前有用过MzTreeView,觉得相当不错,可也不知道是哪门子出了鬼,当时我就是死活想不起来关于此控件的任何信息,因此也无法在网络上搜索。没办法,只好硬着头皮在谷歌、百度上乱搜一通,倒不是没有成果,搜索引擎帮我找到一个命名为“dtree”的控件,使用方法简单得让我惊诧不已,顿时将寻找梅花雪的初衷忘得一干二净了……正当我得意忘形之时,问题出现了,dtree极大程度的给我泼了一盆冷水。因为树节点过多,造成假死的状况,大部分本该“穿戴”在节点身上的衣裳活脱脱的就变成裸体了,而且加载速度也没有达到我预期的期望值。意识到性能问题,立刻搜索关于这个问题的解决方案,然而结果就是我找到了dtree的致命递归(http://tech.ddvip.com/2009-03/1237891234112143.html)。

还是算了吧,看来dtree不是我的菜。还得再搜寻……

最后在糊里糊涂间找到了MzTreeView,来不及欢喜,便着手动工了……

(以上均属题外话,别着急,希望下面的文章能够帮到你。)

为了方便了解,我们姑且分几个步骤来说明。

首先,自然是在后台读取所有树节点。

///<summary>
///加载权限树
///</summary>
///<returns></returns>
public
String LoadTree()
{
String sSql =
"Select FuncID,isnull(SuperFuncID,0) as SuperFuncID,FuncName FromCTL_Func_TBL"
;
DataTable table = ClsCommon.ExcuteDataTable(sSql);
string nodes = ""
;
nodes =
"var data = {};data['-1_0']='text:独辫子网站后台';"
;

foreach (DataRow dr in
table.Rows)
{
nodes +=
"data[\'" + dr["SuperFuncID"].ToString() + "_" + dr["FuncID"].ToString() + "\'] = \'text:" + dr["FuncName"].ToString() + ";\';\r\n"
;
}
nodes +=
"Using(\"System.Web.UI.WebControls.MzTreeView\");"
;
nodes +=
"var tree = new MzTreeView();"
;
nodes +=
"tree.dataSource = data;"
;
nodes +=
"tree.setJsDataPath(\"MzTreeView10/csdn/community/treedata/\");"
;
nodes +=
"tree.setXmlDataPath(\"MzTreeView10/csdn/community/treedata/\");"
;
//a.rootId="1";
nodes += "tree.autoSort=false;"
;
nodes +=
"tree.useCheckbox=true;"
;
nodes +=
"tree.canOperate = true;"
;
nodes +=
"document.write(tree.render());"
;
nodes +=
"tree.expandLevel(1);"
;
//展开所有节点

nodes += "tree.expandAll(0);";
return
nodes;
}

完了,将这个方法安放在Page_Load中去执行:

protectedvoid Page_Load(object sender, EventArgse)
{
if (Session["LoginName"] == null
)
{
Response.Redirect(
"Admin_Login.aspx"
);
}
if (Request.QueryString["ID"] != null
)
{
//Edit//获得角色
ID
sID = Request.QueryString["ID"
].ToString();
}
if
(!IsPostBack)
{
str = LoadTree();
//
if
(!String.IsNullOrEmpty(sID))
{
//Edit//获取该角色所有权限(权限ID用逗号隔开)

DataTable table = FuncManager.GetFuncsByRoleId(sID);
String sChecked =
""
;
foreach (DataRow datarow in
table.Rows)
{
sChecked += datarow[
"FuncID"].ToString() + ","
;
}
//将所有值赋给隐藏控件
hfChecked
hfChecked.Value = sChecked;
}
}
}

第二,在客户端编写相应的方法

<script language="javascript" type="text/javascript">
//SetCheckItems用来设置选中节点,即从数据库读取权限后,勾选相应的节点

function SetCheckItems(items)
{
var nodes = tree.nodes;
//
var IDs=items.split(","
);
for(i=0
;i<IDs.length;i++)
{
//alert(IDs[i].toString());
for(var j in
nodes) {
if
(nodes[j].id==IDs[i]) {
nodes[j].check(
true
);
}
}
}
}
//PushCheckItems用来获取当前需要保存的(已勾选)的所有节点集,惟逗号隔开

//
此方法将在提交按钮的OnClientClick事件中执行
function PushCheckItems()
{
var IDs=
""
;
var nodes = tree.nodes;
for(var i in
nodes) {
if(nodes[i].checked
){
text = nodes[i].text;
IDs +=nodes[i].id +
","
;
}
}
//
var hf=document.getElementById("hfChecked"
);
hf.value = IDs;
}
</script>

第三,前后我们已经后台获取到节点及该角色所包含的权限集,最后我们将在客户端给予显示。

<!--注意:以下这段代码可以放在body标签内的任何一个地方,你希望树在何处展示就放何处-->
<script language=
"JavaScript" type="text/javascript"
>
<%=str%>
//这里的str是在后台定义的一个string,他包含了从数据库取出来的所有节点信息,只能够写这里

setTimeout("SetCheckItems(document.getElementById('hfChecked').value)",1000); </script>

至此,目的达到了。当然,以上所有的一切均需要在MzTreeView控件的基础上实现。

<script type="text/javascript" language="javascript" src="MzTreeView10/jsframework.js"></script>

 效果图:

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值