您的位置:首页 > 博客中心 > 数据库 >

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

时间:2022-03-14 03:00

预览效果图:

 

数据库结构:

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 { get; set
; }
    public string classname { get; set
; }
    public int parentid { get; set
; }
}
抛砖引玉,话不多讲。

热门排行

今日推荐

热门手游