在asp.net中可以在前台使用<asp:Repeater>来遍历查询。
在这里,写一下这个标签嵌套使用的例子和我自己的一些感悟:
示例:
treemanage.aspx前台代码:
<form id="form1" runat="server">
<ul id="treeTemplate" class="easyui-tree" title="">
<li>
<span>模板分类</span>
<ul>
<li><span>默认类别</span>
<ul>
<asp:Repeater ID="rptDefaultList" runat="server">
<ItemTemplate>
<li iconcls="icon-page_white_database_yellow"><span><a href="javascript:void(0);"
class="a2" οnclick="clearSelect();LoadFlow('<%#Eval("FLOW_ID")%>','<%=(OnlyShare?"view":"") %>');">
<%#(Eval("SHARE_STATUS") == null ? "" : (Eval("SHARE_STATUS").ToString()== "1" ? "<span class='a4'>[共享]</span>" : "")) + Eval("FLOW_NAME")%></a></span></li><!--不包含类别的模板-->
</ItemTemplate>
</asp:Repeater>
</ul>
</li>
<asp:Repeater ID="rptTypeList" runat="server" OnItemDataBound="rptTypeList_ItemDataBound">
<ItemTemplate>
<li><span>
<%#Eval("TYPE_NAME")%></span><!---模板类别->
<ul>
<asp:Repeater ID="rptFlowList" runat="server">
<ItemTemplate>
<li iconcls="icon-page_white_database_yellow"><span><a href="javascript:void(0);"
class="a2" οnclick="clearSelect();LoadFlow('<%#Eval("FLOW_ID")%>','<%=(OnlyShare?"view":"") %>');">
<%#(Eval("SHARE_STATUS") == null ? "" : (Eval("SHARE_STATUS").ToString()== "1" ? "<span class='a4'>[共享]</span>" : "")) + Eval("FLOW_NAME")%></a></span></li><!---根据类别分类的模板->
</ItemTemplate>
</asp:Repeater>
</ul>
</li>
</ItemTemplate>
</asp:Repeater>
</ul>
</li>
</ul>
</form>
后台代码:
protected void Page_Load(object sender, EventArgs e)
{
string type = Request["t"];
GAEA.FLOW.Logic.T_FLOW flowL = new GAEA.FLOW.Logic.T_FLOW();
Phoebe.Work.Logic.T_FLOW_TYPE or = new Phoebe.Work.Logic.T_FLOW_TYPE();
List<Phoebe.Work.Model.T_FLOW_TYPE> typelist = or.GetEntityList("", ""); //获取所有模板类别的集合
if (string.IsNullOrEmpty(type))
{
decimal userId = GetUserId();
list = flowL.GetUserTemplateList(null, userId); //根据userid查询出属于某个人的所有模板
//模版只能查看用户本身的
}
else if (type == "share")
{
OnlyShare = true;
list = flowL.GetUserTemplateList(null, '1', null); //查询出可共享的模板
}
this.rptTypeList.DataSource = typelist; //模板类别的数据源
this.rptTypeList.DataBind(); //给模板类别绑定数据(在前台加载显示)
List<decimal> types = (from t in typelist select t.TYPE_ID).ToList();
//在此加这一步查询类别表ID且类型为decimal的list集合便于下一步写lmda表达式查询模板表中不包含类别id的模板,然后给它默认分类
var defaultlist = list.Where(x => !types.Contains(x.FLOW_TYPE_ID.Value));//查询出不包含的模板
this.rptDefaultList.DataSource = defaultlist;
this.rptDefaultList.DataBind();//即为绑定到默认分类里
}
List<GAEA.FLOW.Model.T_FLOW> list = new List<GAEA.FLOW.Model.T_FLOW>();//创建一个公有的list集合
protected void rptTypeList_ItemDataBound(object sender, RepeaterItemEventArgs e)//添加二级分类
{
decimal userId = GetUserId();
// 判断里层的repeater处于哪个外层repeater的哪个位置
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
Repeater rptClass = e.Item.FindControl("rptFlowList") as Repeater; // 查找内层Repeater并转换到相应类型
Phoebe.Work.Model.T_FLOW_TYPE drv = (Phoebe.Work.Model.T_FLOW_TYPE)e.Item.DataItem; // 找到外层Repeater关联的数据项
int id = Convert.ToInt32(drv.TYPE_ID); // 取得pID
List<GAEA.FLOW.Model.T_FLOW> list1 = list.Where(a => a.FLOW_TYPE_ID == id).ToList();//查询出模板类别表id等于模板中模板类别id的集合(即此处做分类处理的)
rptClass.DataSource = list1;
rptClass.DataBind();//数据源绑定
}
}