asp.net中嵌套遍历树结构

在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" onclick="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" onclick="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的模板,然后给它默认分类

扫描二维码关注公众号,回复: 1111432 查看本文章

            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();//数据源绑定

            }
        }



猜你喜欢

转载自blog.csdn.net/qq_41760419/article/details/79917496
今日推荐