DropDownList实现无限分级
数据库:SqlServer2000
表:tree
表结构:
测试数据:
算法:使用递归实现
======================================
asp.net代码:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
namespace AspNetTest.Common
{
/// <summary>
/// tree 的摘要说明。
/// </summary>
public class tree : System.Web.UI.Page
{
private DataTable dtPowerTree = new DataTable();
private DataTable dt=new DataTable();
protected System.Web.UI.WebControls.DropDownList DropDownList1;
protected System.Web.UI.WebControls.TextBox TextBox1;
const string tablename = "tree";
protected System.Web.UI.WebControls.DropDownList DropDownList2;
private string strText;
private void Page_Load(object sender, System.EventArgs e)
{
if(!Page.IsPostBack)
{
FillTreeDataTable();
blTreeDataTable(0);
dtPowerTree.Clear();
}
// 在此处放置用户代码以初始化页面
}
private void FillTreeDataTable()
{
string ConnectionString = System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"];
SqlConnection conn = new SqlConnection(ConnectionString);
SqlDataAdapter da = new SqlDataAdapter("select Id,PowerName,Layer,ParentId from " + tablename, conn);
da.Fill(dtPowerTree);
}
private void blTreeDataTable(int _ParentId)
{
string filter = "ParentId=" + _ParentId;
string sort = "Id ASC";
DataRow[] drs = dtPowerTree.Select(filter, sort);
for(int i=0; i<drs.Length; i++)
{
if(Convert.ToInt32(drs[i][3]) == _ParentId)
{
int Id = Convert.ToInt32(drs[i][0]);
string PowerName = drs[i][1].ToString();
int Layer = Convert.ToInt32(drs[i][2]);
for(int n=1;n<=Layer; n++)
{
strText += HttpUtility.HtmlDecode(" ");
}
if(_ParentId!=0)
{
DropDownList1.Items.Add(new ListItem(strText+"┣"+PowerName,Id.ToString()));
strText="";
}
else
{
DropDownList1.Items.Add(new ListItem(PowerName,Id.ToString()));
}
blTreeDataTable(Id);
}
}
}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.DropDownList1.SelectedIndexChanged += new System.EventHandler(this.DropDownList1_SelectedIndexChanged);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
}
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
namespace AspNetTest.Common
{
/// <summary>
/// tree 的摘要说明。
/// </summary>
public class tree : System.Web.UI.Page
{
private DataTable dtPowerTree = new DataTable();
private DataTable dt=new DataTable();
protected System.Web.UI.WebControls.DropDownList DropDownList1;
protected System.Web.UI.WebControls.TextBox TextBox1;
const string tablename = "tree";
protected System.Web.UI.WebControls.DropDownList DropDownList2;
private string strText;
private void Page_Load(object sender, System.EventArgs e)
{
if(!Page.IsPostBack)
{
FillTreeDataTable();
blTreeDataTable(0);
dtPowerTree.Clear();
}
// 在此处放置用户代码以初始化页面
}
private void FillTreeDataTable()
{
string ConnectionString = System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"];
SqlConnection conn = new SqlConnection(ConnectionString);
SqlDataAdapter da = new SqlDataAdapter("select Id,PowerName,Layer,ParentId from " + tablename, conn);
da.Fill(dtPowerTree);
}
private void blTreeDataTable(int _ParentId)
{
string filter = "ParentId=" + _ParentId;
string sort = "Id ASC";
DataRow[] drs = dtPowerTree.Select(filter, sort);
for(int i=0; i<drs.Length; i++)
{
if(Convert.ToInt32(drs[i][3]) == _ParentId)
{
int Id = Convert.ToInt32(drs[i][0]);
string PowerName = drs[i][1].ToString();
int Layer = Convert.ToInt32(drs[i][2]);
for(int n=1;n<=Layer; n++)
{
strText += HttpUtility.HtmlDecode(" ");
}
if(_ParentId!=0)
{
DropDownList1.Items.Add(new ListItem(strText+"┣"+PowerName,Id.ToString()));
strText="";
}
else
{
DropDownList1.Items.Add(new ListItem(PowerName,Id.ToString()));
}
blTreeDataTable(Id);
}
}
}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.DropDownList1.SelectedIndexChanged += new System.EventHandler(this.DropDownList1_SelectedIndexChanged);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
}