无限分级Repeater递归实现:读取一次数据库,使用LINQ2SQL技术,支持排序&显示隐藏
预览效果图:
数据库结构:
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 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);
}
}
}
使用到的类:
{
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技术,支持排序&显示隐藏的更多相关文章
- C#使用二叉树算法设计一个无限分级的树表
效果图: 数据库: 操作树的示意图: 控制器代码: using Dw.Business; using Dw.Entity; using Dw.Utilities; using System; usin ...
- 无限分级和tree结构数据增删改【提供Demo下载】
无限分级 很多时候我们不确定等级关系的层级,这个时候就需要用到无限分级了. 说到无限分级,又要扯到递归调用了.(据说频繁递归是很耗性能的),在此我们需要先设计好表机构,用来存储无限分级的数据.当然,以 ...
- 基于react实现无限分级菜单
在开发CMS(内容管理系统)系统时,一般都会用到一个侧边栏或者顶部的二级或者三级菜单,当点击或者鼠标悬浮时,菜单能够随之展开或收起. 本文纯粹为了练习一下react,因此我会在react环境下实现这么 ...
- C#无限分级实现,前端WEB页面接收,后台提供层级Json数据
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Te ...
- SQLBulkCopy使用实例--读取Excel写入数据库/将 Excel 文件转成 DataTable
MS SQL Server 提供一个称为 bcp 的流行的命令提示符实用工具,用于将数据从一个表移动到另一个表(表可以在不同服务器上). SqlBulkCopy 类允许编写提供类似功能的托管代码解决方 ...
- C#改变LInqToSQL的引用地址,读取config的数据库字符串
C#改变LInqToSQL的引用地址,读取config的数据库字符串修改Properties 下 Settings.Settings 下 Settings.Designer.cs 下 return ( ...
- PHP无限极分类生成树方法,无限分级
你还在用浪费时间又浪费内存的递归遍历无限极分类吗,看了该篇文章,我觉得你应该换换了.这是我在OSChina上看到的一段非常精简的PHP无限极分类生成树方法,巧在引用,整理分享了. function g ...
- php无限极分类递归与普通
1. 递归 public function getInfo(){$data=$this->select();$arr=$this->noLimit($data,$f_id=0,$level ...
- UVa 839 (递归方式读取二叉树) Not so Mobile
题意: 递归的方式输入一个树状天平(一个天平下面挂的不一定是砝码还可能是一个子天平),判断这个天平是否能满足平衡条件,即W1 * D1 == W2 * D2. 递归的方式处理输入数据感觉很巧妙,我虽然 ...
随机推荐
- 使用Entify Framework 6.x的事务操作
public void TransactionsTest() { using (var context = new testContext()) { //使用EF事务 在vs2013中先升级Entit ...
- gitlab仓库迁移
遇到一个情况,需要将两个gitlab仓库合并.好在都是使用的ldap账户登陆,用户账户不需要迁移. 实际的使用情况下,需要迁移的主要部分为分组及分组下项目.gitlab的api还是很给力的,能够获取所 ...
- 初学者易上手的SSH-struts2 04值栈与ognl表达式
什么是值栈?struts2里面本身提供的一种存储机制,类似于域对象,值栈,可以存值和取值.,特点:先进后出.如果将它当做一个容器的话,而这个容器有两个元素,那么最上面的元素叫做栈顶元素,也就是所说的压 ...
- js系列教程2-对象、构造函数、对象属性全解
全栈工程师开发手册 (作者:栾鹏) 快捷链接: js系列教程1-数组操作全解 js系列教程2-对象和属性全解 js系列教程3-字符串和正则全解 js系列教程4-函数与参数全解 js系列教程5-容器和算 ...
- Installation of the JDK-9 on ubuntu(linux上安装jdk-9)
Description:Java SE 9 is the latest update to the Java Platform(General Availability on 21 September ...
- 【转载】jQuery手机移动端触屏日历日期选择
文章转载自 科e互联 http://www.internetke.com/ 原文链接:http://www.internetke.com/effects/css3/2015/0120/1222.htm ...
- 【学习】条码扫描器:QuaggaJS
QuaggaJS是条形码扫描器完全用JavaScript编写,支持实时对各类条码进行定位和解码,如EAN和CODE128.该库还能够使用getUserMedia获得直接访问用户的摄像头流.为了充分利用 ...
- java多线程编程题之连续打印abc的几种解法
一道编程题如下: 实例化三个线程,一个线程打印a,一个打印b,一个打印c,三个线程同时执行,要求打印出6个连着的abc 题目分析: 通过题意我们可以得出,本题需要我们使用三个线程,三个线程分别会打印6 ...
- pm2部署多个nodejs项目配置教程
实际项目部署中,我们服务器在启动的时候需要自动启动node服务.以前是通过liunx自带的命令启动.但是随着后台微服务越来越多.每次发布新程序.修改脚本太麻烦了.于是换成PM2来做. 1.首先安装pm ...
- 解析 .Net Core 注入 (1) 注册服务
在学习 Asp.Net Core 的过程中,注入可以说是无处不在,对于 .Net Core 来说,它是独立的一个程序集,没有复杂的依赖项和配置文件,所以对于学习 Asp.Net Core 源码的朋友来 ...