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
    ; }
    }
    抛砖引玉,话不多讲。
  • 相关阅读:
    NeoFinder for Mac(增强型文件管理工具)破解版安装
    Monodraw for Mac(基于 ASCII 码设计编辑工具)破解版安装
    SNF开发平台WinForm-审核流使用方法样例
    SNF快速开发平台MVC-Grid++集成打印
    SNF快速开发平台MVC-富文本控件集成了百度开源项目editor
    C#按回车Enter使输入焦点自动跳到下一个TextBox的方法收集
    SNF快速开发平台MVC-EasyUI3.9之-WebApi和MVC-controller层接收的json字符串的取值方法和调用后台服务方法
    SNF快速开发平台--规则引擎在程序当中如何调用
    SNF快速开发平台--规则引擎介绍和使用文档
    SNF快速开发平台MVC-EasyUI3.9之-DataGrid表格控件如何增加右键菜单
  • 原文地址:https://www.cnblogs.com/joke168/p/4121669.html
Copyright © 2011-2022 走看看