预览效果图:

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

无限分级Repeater递归实现:读取一次数据库,使用LINQ2SQL技术,支持排序&amp;显示隐藏的更多相关文章

  1. C#使用二叉树算法设计一个无限分级的树表

    效果图: 数据库: 操作树的示意图: 控制器代码: using Dw.Business; using Dw.Entity; using Dw.Utilities; using System; usin ...

  2. 无限分级和tree结构数据增删改【提供Demo下载】

    无限分级 很多时候我们不确定等级关系的层级,这个时候就需要用到无限分级了. 说到无限分级,又要扯到递归调用了.(据说频繁递归是很耗性能的),在此我们需要先设计好表机构,用来存储无限分级的数据.当然,以 ...

  3. 基于react实现无限分级菜单

    在开发CMS(内容管理系统)系统时,一般都会用到一个侧边栏或者顶部的二级或者三级菜单,当点击或者鼠标悬浮时,菜单能够随之展开或收起. 本文纯粹为了练习一下react,因此我会在react环境下实现这么 ...

  4. C#无限分级实现,前端WEB页面接收,后台提供层级Json数据

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Te ...

  5. SQLBulkCopy使用实例--读取Excel写入数据库/将 Excel 文件转成 DataTable

    MS SQL Server 提供一个称为 bcp 的流行的命令提示符实用工具,用于将数据从一个表移动到另一个表(表可以在不同服务器上). SqlBulkCopy 类允许编写提供类似功能的托管代码解决方 ...

  6. C#改变LInqToSQL的引用地址,读取config的数据库字符串

    C#改变LInqToSQL的引用地址,读取config的数据库字符串修改Properties 下 Settings.Settings 下 Settings.Designer.cs 下 return ( ...

  7. PHP无限极分类生成树方法,无限分级

    你还在用浪费时间又浪费内存的递归遍历无限极分类吗,看了该篇文章,我觉得你应该换换了.这是我在OSChina上看到的一段非常精简的PHP无限极分类生成树方法,巧在引用,整理分享了. function g ...

  8. php无限极分类递归与普通

    1. 递归 public function getInfo(){$data=$this->select();$arr=$this->noLimit($data,$f_id=0,$level ...

  9. UVa 839 (递归方式读取二叉树) Not so Mobile

    题意: 递归的方式输入一个树状天平(一个天平下面挂的不一定是砝码还可能是一个子天平),判断这个天平是否能满足平衡条件,即W1 * D1 == W2 * D2. 递归的方式处理输入数据感觉很巧妙,我虽然 ...

随机推荐

  1. ASP.NET没有魔法——第一个ASP.NET应用《MyBlog》

    创建一个ASP.NET MVC应用程序 在之前文章中介绍了ASP.NET中提供了3个开发动态网页的框架,分别是Web Form.MVC以及Web Pages,也大概介绍了它们的特点. 其中MVC对于其 ...

  2. asp.net 的发布与执行

    asp.net的工程文件在测试完成后就是发布(部署)和执行. 发布 本地发布的例子 1,菜单项  生成--发布 2,如果是第一次发布,点击自定义,设置配置文件的名称 3,发布方法--文件系统,设置本地 ...

  3. 一个demo学会js

    全栈工程师开发手册 (作者:栾鹏) 快捷链接: js系列教程1-数组操作全解 js系列教程2-对象和属性全解 js系列教程3-字符串和正则全解 js系列教程4-函数与参数全解 js系列教程5-容器和算 ...

  4. jquery系列教程4-事件操作全解

    点击打开: jquery系列教程1-选择器全解 jquery系列教程2-style样式操作全解 jquery系列教程3-DOM操作全解 jquery系列教程4-事件操作全解 jquery系列教程5-动 ...

  5. iOS开发工程师必备技能(持续更新)

    Objective-C Objective-C语言基础 library,framework的制作 Runtime 编程 LLVM 原理和调优 操作系统 iOS内存管理和调优 iOS的文件系统和沙盒机制 ...

  6. 搭建阿里云 centos mysql tomcat jdk

    [toc] 阿里云使用centos 登录 http://www.aliyun.com/ 点击登录 进入控制 https://home.console.aliyun.com/ 云服务器 运行中 把ip输 ...

  7. 深入Javascript之this

    前言 近期准备好好的读一读<你不知道的JavaScript(上卷)>这本书,俗话说的好,好记性不如烂笔头,读到this这章感觉是时候需要一些笔记了.文中如有错误之处,欢迎指出. 什么是th ...

  8. 【转】话说C语言const用法

    原文:话说C语言const用法 const在C语言中算是一个比较新的描述符,我们称之为常量修饰符,意即其所修饰的对象为常量(immutable). 我们来分情况看语法上它该如何被使用. 1.函数体内修 ...

  9. .NET之父 - Anders Hejlsberg

    简介 安德斯·海尔斯伯格(Anders Hejlsberg,1960.12~),丹麦人,Turbo Pascal编译器的主要作者,Delphi和.NET之父! 安德斯·海尔斯伯格曾在丹麦技术大学学习工 ...

  10. Azure 基础:使用 powershell 创建虚拟机

    在进行与 azure 相关的自动化过程中,创建虚拟主机是避不开的操作.由于系统本身的复杂性,很难用一两条简单的命令完成虚拟主机的创建.所以专门写一篇文章来记录使用 PowerShell 在 azure ...