zoukankan      html  css  js  c++  java
  • 无限分级Repeater递归实现:读取一次数据库,使用LINQ2SQL技术,支持排序&显示隐藏

    预览效果图:

      Selenium

    数据库结构:

    id(int)    classname(string)   parentid(int) sort(int用于显示与排序)

    1  家居  0  1

    2  家电  0  2

    3  沙发  1  1

    4  某...   3      1

    ...

    10   ...红色   4      1

     注:

    parentid  父节点ID

    sort 用于隐藏或显示 兼排序功能

    前台:

    <asp:Repeater ID="rep" runat="server" onitemdatabound="rep_ItemDataBound">
    <HeaderTemplate></HeaderTemplate>
    <ItemTemplate></ItemTemplate>
    <FooterTemplate></FooterTemplate>
    </asp:Repeater>

    后台:

    代码
    public partial class 递归2 : System.Web.UI.Page
    {
        
    public List<cmodel>
     list;
        
    protected void Page_Load(object
     sender, EventArgs e)
        {
            
    if (!
    IsPostBack)
            {
                rules r 
    = new
     rules();
                list 
    =
     r.getlist();//读取数据库
                
    this.rep.DataSource = list.Where(x => x.parentid == 0
    ).ToList();//LINQ2OBJECT
                
    this
    .rep.DataBind();
            }
        }

        
    protected void rep_ItemDataBound(object
     sender, RepeaterItemEventArgs e)
        {
            
    if (e.Item.ItemType ==
     ListItemType.Header)
            {
                Literal l 
    = new
     Literal();
                l.ID 
    = "ul"
    ;
                l.Text
    ="<ul>"
    ;
                e.Item.Controls.Add(l);
            }
            
    else if (e.Item.ItemType ==
     ListItemType.Footer)
            {
                Literal l 
    = new
     Literal();
                l.ID 
    = "ul2"
    ;
                l.Text 
    = "</ul>"
    ;
                e.Item.Controls.Add(l);
            }
            
    else if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType ==
     ListItemType.AlternatingItem)
            {
                
    int id = (int)DataBinder.Eval(e.Item.DataItem, "id"
    );
                Literal li1 
    = new
     Literal();
                li1.ID 
    = "li1"
    ;
                li1.Text 
    = "<li>"
    ;
                e.Item.Controls.Add(li1);

                Literal name 
    = new
     Literal();
                name.ID 
    = "n"
    ;
                name.Text 
    = DataBinder.Eval(e.Item.DataItem, "classname"
    ).ToString();
                e.Item.Controls.Add(name);
                List
    <cmodel> temp = list.Where(x => x.parentid ==
     id).ToList();//LINQ2OBJECT
                
    if (temp.Count > 0
    )
                {
                    Repeater r 
    = new
     Repeater();
                    TemplateBuilder tb 
    = new
     TemplateBuilder();
                    tb.AppendLiteralString(
    ""
    );
                    r.HeaderTemplate 
    =
     tb;
                    r.FooterTemplate 
    =
     tb;
                    r.ItemTemplate 
    =
     tb;
                    r.ItemDataBound 
    += new
     RepeaterItemEventHandler(rep_ItemDataBound); //递归核心
                    r.DataSource 
    =
     temp;
                    r.DataBind();
                    e.Item.Controls.Add(r);
                }
                Literal li2 
    = new
     Literal();
                li2.ID 
    = "li2"
    ;
                li2.Text 
    = "</li>"
    ;
                e.Item.Controls.Add(li2);
            }
        }

    }

    使用到的类:

    代码
    public class rules
    {
        DataClasses1DataContext dc 
    = new
     DataClasses1DataContext();

        
    public List<cmodel>
     getlist()
        {
            var q 
    = from x in
     dc.ClassFJ
                    
    where x.sort > 0  //用于控制显示隐藏

                    orderby x.sort    //兼职排序功能
                    select new cmodel
                    (
                        x.id,
                        x.className,
                        x.parentid
                    );
            
    return q.ToList<cmodel>
    ();
        }
    }

    public class
     cmodel
    {
        
    public cmodel(int i,string n,int
     p)
        {
            id 
    =
     i;
            classname 
    =
     n;
            parentid 
    =
     p;
        }
        
    public int id { getset
    ; }
        
    public string classname { getset
    ; }
        
    public int parentid { getset
    ; }
    }
    抛砖引玉,话不多讲。
  • 相关阅读:
    小朋友排队--第五届蓝桥杯
    Spring IOC源代码具体解释之整体结构
    Libimseti推荐系统
    Codeforces Round #277.5 (Div. 2)(C题)
    数据库经常使用函数
    Command terminated by signal 11
    winform程序公布后,client下载报错“您的 Web 浏览器设置不同意执行未签名的应用程序”
    Cocos2d-x学习笔记(四) 布景层的加入移除
    FMSC 使用理解
    将浮点数保持几位小数,尾数舍入的Format函数
  • 原文地址:https://www.cnblogs.com/joke168/p/4121669.html
Copyright © 2011-2022 走看看