DropDownList中显示无限级树形结构

简介:

效果图:

数据库表:

DirID:目录的ID,ParentID:目录的父路径ID,Name:目录的名字
主要代码:

DropDownList中显示无限级树形结构 - kewangwu - kewangwu的博客
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.SqlClient;

public partial class DropdownlistTree : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataTable datatable = this.GetDataTable();
DataRow[] row = datatable.Select("ParentID='-1'");
//添加根目录
ListItem li = new ListItem(row[0]["Name"].ToString());
DropDownList1.Items.Add(li);
addOtherDll("", Convert.ToInt32(row[0]["DirID"]), datatable,1);
}
}
/**//// <summary>
/// 添加其他节点
/// </summary>
/// <param name="Pading">空格</param>
/// <param name="DirId">父路径ID</param>
/// <param name="datatable">返回的datatable</param>
/// <param name="deep">树形的深度</param>
private void addOtherDll(string Pading, int DirId, DataTable datatable,int deep)
{
DataRow[] rowlist=datatable.Select("ParentID='"+DirId+"'");
foreach (DataRow row in rowlist)
{
string strPading = "";
for (int j = 0; j < deep; j++)
{
strPading += " "; //用全角的空格
}
//添加节点
ListItem li = new ListItem(strPading + "|--" + row["Name"].ToString());
DropDownList1.Items.Add(li);
//递归调用addOtherDll函数,在函数中把deep加1
addOtherDll(strPading,Convert.ToInt32(row["DirID"]), datatable,deep+1);
}
}
/**//// <summary>
/// 从数据库中读取数据返回datatable
/// </summary>
/// <returns></returns>
private DataTable GetDataTable()
{
SqlConnection conn = newSqlConnection(ConfigurationManager.ConnectionStrings["Personal"].ConnectionString);
SqlDataAdapter adp = new SqlDataAdapter("select * from Test", conn);
DataSet datset = new DataSet();
conn.Open();
adp.Fill(datset, "Test");
return datset.Tables[0];
}
}

当然,当读取DropDownList时若要去除"|--"和空格可以调用addOtherDll.SelectValue().Replace("|--","").Trim()

分类:  ASP.NET
本文转自左正博客园博客,原文链接:http://www.cnblogs.com/soundcode/p/3850809.html ,如需转载请自行联系原作者
相关文章
|
6月前
|
敏捷开发 前端开发 开发者
【RaETable】🚀🚀🚀告别Form,RaETable表格列宽度支持拖动调整了,附带原理说明
【RaETable】🚀🚀🚀告别Form,RaETable表格列宽度支持拖动调整了,附带原理说明
|
7月前
|
设计模式 人工智能 安全
没有性能瓶颈的无限级菜单树应该这样设计
以一门网络课程为例,我们设计一个课程的关系结构。比如,我们有Java入门课程、人工智能课程、Java设计模式、源码分析、软技能等,而Java设计模式、源码分析、软技能又属于Java架构师系列课程包,每个课程的定价都不一样。但是,这些课程不论怎么组合,都有一些共性,而且是整体和部分的关系,可以用组合模式来设计。首先创建一个顶层的抽象组件CourseComponent类。
61 0
|
前端开发
解决鼠标经过覆盖于低层级div的高层级div,依旧会触发低层级的hover属性的问题
解决鼠标经过覆盖于低层级div的高层级div,依旧会触发低层级的hover属性的问题
165 0
解决鼠标经过覆盖于低层级div的高层级div,依旧会触发低层级的hover属性的问题
|
JavaScript 数据建模 数据格式
【自然框架】n级下拉列表框的原理
  其实原理也很简单,分成两个部分,一个是服务器端,一个是客户端。     首先要设置记录集,这里用DataSet来装载,二级联动,里面就要有两个DataTable;三级联动,里面就要有三个DataTable。
1171 0
|
程序员 C++
IE6 VS IE7 ——显示大量控件时的表现
     我们由一个OA项目,b/s结构的,给客户安装之后运行后还算顺利。有一天,客户打来电说是要增加一个功能,能够批量的录入数据,有一个n行12列的表格,要往里面录入数据,但是不想一条一条的录入,想要一次录入多条的数据,然后一次性的提交保存。
831 0
SAP前台操作时,如何客制化表格的宽度和位置
查看采购订单,事务码ME23N点击表格按钮后,点击【管理员】如下所示
1777 0