
<%...@ Control Language="C#" AutoEventWireup="true" CodeBehind="LeftMenu.ascx.cs" Inherits="SXT.iPowerKit.HairHouse.Web.WebControls.LeftMenu" %>
<%...@ Register TagPrefix="sxt" Namespace="SXT.Common.Web.UI" Assembly="SXT.Common.Web.UI" %>

<script language="javascript">...
function outliner(flag)
...{
var child = document.all[event.srcElement.getAttribute("child",false)];
for(i=1;i<=<%=Num %>;i++)
...{
var v=(i+flag);
if(document.getElementById(v))
document.getElementById(v).className="collapsed";
}
if (null != child)
...{
if(child.className == "collapsed")
...{
child.className = "expanded";
return;
}
}
}
</script>
<table cellspacing="0" cellpadding="0" width="100%">
<tr style="height:5px"><td></td></tr>
<tr>
<td valign="top">
<table width="95%" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td id="Td1" width="100%" valign="top" runat="server">
<sxt:RepeaterEx ID="rptSystemList" runat="server">
<ItemTemplate> 
<%...--<div style='display:<%# GetAdminStyle(Eval("systemID").ToString())%>'>--%>
<div style='display:block'>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="100%" height="22" background="image/left_menu_bg.GIF" style="border:1px solid #dfeaf0">
<table width="97%" height="22" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td width="19%"><img src="/image/LeftMenu/left_menu_dot1.gif" width="31" height="22" /></td>
<td width="81%"><font style="font-size:14px; color:#3d7699;font-weight:bold;CURSOR: hand" onclick="outliner('ALL')" child='<%#Eval("Num") %>ALL'><%#Eval("ModuleName")%></font></td>
</tr>
</table>
</td>
</tr>
</table>
<div class='<%# Convert.ToInt32(Eval("Num"))>1?"collapsed":"expanded" %>' id='<%#Eval("Num") %>ALL'>
<div style="height:178px">
<table width="144" border="0" align="center" cellpadding="0" cellspacing="0">
<sxt:RepeaterEx ID="rptChildList" runat="server" datasource='<%# ChildSystemDataSource(Eval("moduleID"))%>'>
<ItemTemplate>
<tr>
<td width="14" height="20">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="14" height="20"><img src="image/gscontent_dot1.GIF" width="6" height="6" /></td>
</tr>
</table>
</td>
<td width="130"> <a href='<%# Eval("ModuleUrl") %>' class="content"><%# Eval("ModuleName") %></a>
</td>
</tr>
</ItemTemplate>
</sxt:RepeaterEx>
</table>
</div>
</div>
</div>
</ItemTemplate>
</sxt:RepeaterEx>
</td>
</tr>
</table>
</td>
</tr>
<tr style="height:5px"><td></td></tr>
</table>
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;

namespace SXT.iPowerKit.HairHouse.Web.WebControls
...{
public partial class LeftMenu : BaseUserControl
...{
protected void Page_Load(object sender, EventArgs e)
...{
this.LoadData();
}
public override void LoadData()
...{
this.rptSystemList.DataSource = this.DataSource;
this.rptSystemList.DataBind();
}
public DataSet DataSource
...{
get
...{
try
...{
DataSet ds = new DataSet();
//获得当前系统模块所有子模块
DataTable dataSource = ((SXT.BLLInterface.ISXTPage)(this.Page)).ModuleDefineConfig;
//子系统列表,得到源数据结构
DataTable dtSystem = dataSource.Clone();
dtSystem.TableName = "ChildSystemList";
//父系统列表,得到源数据结构
DataTable dtParentSystem = dataSource.Clone();
//在源数据结构,获得父级菜单
DataRow[] drParentSystem = dataSource.Select("ParentModuleID=''");
for (int i = 0; i < drParentSystem.Length; i++)
...{
DataRow dr = dtParentSystem.NewRow();
dr.ItemArray = drParentSystem[i].ItemArray;
dtParentSystem.Rows.Add(dr);
}
//获得父级菜单个数
dtParentSystem.TableName = "ParsentSystemList";
dtParentSystem.Columns.Add(new System.Data.DataColumn("Num", typeof(System.Int32)));
dtParentSystem.AcceptChanges();
for (int i = 0; i < dtParentSystem.Rows.Count; i++)
...{
dtParentSystem.Rows[i]["Num"] = i + 1;
}
//根据父级ModuleID得到所有子系统
for (int j = 0; j < dataSource.Rows.Count; j++)
...{
DataRow[] drChildSystem = dataSource.Select("ParentModuleID='" + dataSource.Rows[j]["ModuleID"] + "'");
for (int k = 0; k < drChildSystem.Length; k++)
...{
DataRow drValue = dtSystem.NewRow();
drValue.ItemArray = drChildSystem[k].ItemArray;
dtSystem.Rows.Add(drValue);
}
}
//将数据放入Table中
ds.Tables.Add(dtParentSystem.Copy());
ds.Tables.Add(dtSystem.Copy());
//ds.Relations.Add("MyRelation", ds.Tables[0].Columns["ModuleID"], ds.Tables[1].Columns["ParentModuleID"]);
return ds;
}
catch (Exception ex)
...{
return null;
}
}
}
/**//// <summary>
/// 根据父级获得子系统
/// </summary>
/// <param name="moduleID">父级ID</param>
/// <returns></returns>
public DataTable ChildSystemDataSource(object moduleID)
...{
DataTable dtChild = this.DataSource.Tables[1];
DataRow[] drChild = dtChild.Select("ParentModuleID='"+moduleID.ToString()+"'");
dtChild = dtChild.Clone();
for (int i = 0; i < drChild.Length; i++)
...{
DataRow dr = dtChild.NewRow();
dr.ItemArray = drChild[i].ItemArray;
dtChild.Rows.Add(dr);
}
return dtChild;
}
public int Num
...{
get
...{
DataSet ds = this.DataSource;
if (ds != null)
...{
return ds.Tables[0].Rows.Count;
}
else
...{
return 0;
}
}
}
}
}
本文介绍了一个用于 ASP.NET 的左侧菜单组件的设计与实现细节。该组件使用 C# 编写,通过 Repeater 控件展示系统模块及子模块,并支持折叠与展开功能。文章详细解释了数据绑定过程及 JavaScript 函数如何控制菜单项的状态。
5万+

被折叠的 条评论
为什么被折叠?



