62,041
社区成员
发帖
与我相关
我的任务
分享
using System;
using System.Data;
using System.Collections.Generic;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Text;
using System.Text.RegularExpressions;
using System.Xml;
using System.IO;
using System.Reflection;
using System.Net;
public partial class Default5 : System.Web.UI.Page
{
DataView dv;
/// <summary>
/// 层次分割符
/// </summary>
const string STR_TREENODE = "┆┄";
const string STR_ID = "id";
const string STR_PARENTID = "parentid";
const string STR_DISPLAYNAME = "typename";
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
dv = new DataView(this.AreaSource);
dv.Sort = STR_PARENTID;
string schar = STR_TREENODE;
if (dv.Table.Rows.Count > 0)
{
RecursBind(-1, ref schar);
}
}
}
/// <summary>
/// 递归绑定DropDownList
/// </summary>
/// <param name="pid"></param>
/// <param name="schar"></param>
private void RecursBind(int pid, ref string schar)
{
if (pid == -1)
{
foreach (DataRow row in dv.Table.Rows)
{
if (Convert.ToInt32(row[STR_ID]) == Convert.ToInt32(row[STR_PARENTID]))
{
this.AreaList.Items.Add(new ListItem(schar + row[STR_DISPLAYNAME].ToString(), row[STR_ID].ToString()));
RecursBind(Convert.ToInt32(row[STR_ID]), ref schar);
}
}
}
else
{
DataRowView[] rows = dv.FindRows(pid);
foreach (DataRowView row in rows)
{
if (Convert.ToInt32(row[STR_ID]) != Convert.ToInt32(row[STR_PARENTID]))
{
schar += STR_TREENODE;
this.AreaList.Items.Add(new ListItem(schar + row[STR_DISPLAYNAME].ToString(), row[STR_ID].ToString()));
RecursBind(Convert.ToInt32(row[STR_ID]), ref schar);
}
}
schar = STR_TREENODE;
}
}
/// <summary>
/// 测试数据源
/// </summary>
private DataTable AreaSource
{
get
{
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn(STR_ID, typeof(int)));
dt.Columns.Add(new DataColumn(STR_PARENTID, typeof(int)));
dt.Columns.Add(new DataColumn(STR_DISPLAYNAME, typeof(string)));
dt.Rows.Add(new object[] { 1, 1, "湖北" });
dt.Rows.Add(new object[] { 2, 2, "江苏" });
dt.Rows.Add(new object[] { 3, 3, "浙江" });
dt.Rows.Add(new object[] { 4, 1, "黄冈" });
dt.Rows.Add(new object[] { 5, 4, "黄冈镇级" });
dt.Rows.Add(new object[] { 6, 5, "黄冈村" });
dt.Rows.Add(new object[] { 7, 3, "杭州" });
dt.Rows.Add(new object[] { 8, 2, "南京" });
dt.Rows.Add(new object[] { 9, 6, "黄冈村下级" });
dt.Rows.Add(new object[] { 10, 7, "杭州区" });
dt.Rows.Add(new object[] { 11, 8, "南京区" });
dt.Rows.Add(new object[] { 12, 11, "南京区下级" });
dt.Rows.Add(new object[] { 13, 12, "南京区下级的下级" });
return dt;
}
}
}
/// <summary>
/// 递归绑定DropDownList
/// </summary>
/// <param name="pid"></param>
/// <param name="schar"></param>
private void RecursBind(int pid, ref string schar)
{
if (pid == -1)
{
foreach (DataRow row in dv.Table.Rows)
{
if (Convert.ToInt32(row[STR_ID]) == Convert.ToInt32(row[STR_PARENTID]))
{
this.AreaList.Items.Add(new ListItem(schar + row[STR_DISPLAYNAME].ToString(), row[STR_ID].ToString()));
Response.Write(schar + row[STR_DISPLAYNAME].ToString()+"<br>");
RecursBind(Convert.ToInt32(row[STR_ID]), ref schar);
}
}
}
else
{
DataRowView[] rows = dv.FindRows(pid);
string temp=null;
for(int i=0;i<rows.Length;i++)
{
if (Convert.ToInt32(rows[i][STR_ID]) != Convert.ToInt32(rows[i][STR_PARENTID]))
{
if (temp == null) temp = schar;
schar += STR_TREENODE;
Response.Write(schar + rows[i][STR_DISPLAYNAME].ToString() + "<br>");
this.AreaList.Items.Add(new ListItem(schar + rows[i][STR_DISPLAYNAME].ToString(), rows[i][STR_ID].ToString()));
RecursBind(Convert.ToInt32(rows[i][STR_ID]), ref schar);
schar = temp;
}
}
}
}
private DataTable AreaSource
{
get
{
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn(STR_ID, typeof(int)));
dt.Columns.Add(new DataColumn(STR_PARENTID, typeof(int)));
dt.Columns.Add(new DataColumn(STR_DISPLAYNAME, typeof(string)));
dt.Rows.Add(new object[] { 1, 1, "湖北" });
dt.Rows.Add(new object[] { 2, 2, "江苏" });
dt.Rows.Add(new object[] { 3, 3, "浙江" });
dt.Rows.Add(new object[] { 4, 1, "黄冈" });
dt.Rows.Add(new object[] { 5, 4, "黄冈镇级" });
dt.Rows.Add(new object[] { 6, 5, "黄冈村" });
dt.Rows.Add(new object[] { 7, 3, "杭州" });
dt.Rows.Add(new object[] { 8, 2, "南京" });
dt.Rows.Add(new object[] { 9, 6, "黄冈村下级" });
dt.Rows.Add(new object[] { 10, 7, "杭州区" });
dt.Rows.Add(new object[] { 11, 8, "南京区" });
dt.Rows.Add(new object[] { 12, 11, "南京区下级1" });
dt.Rows.Add(new object[] { 13, 11, "南京区下级2" });
dt.Rows.Add(new object[] { 14, 12, "南京区下级1的下级" });
return dt;
}
}
/// <summary>
/// 测试数据源
/// </summary>
private DataTable AreaSource
{
get
{
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn(STR_ID, typeof(int)));
dt.Columns.Add(new DataColumn(STR_PARENTID, typeof(int)));
dt.Columns.Add(new DataColumn(STR_DISPLAYNAME, typeof(string)));
dt.Rows.Add(new object[] { 1, 1, "湖北" });
dt.Rows.Add(new object[] { 2, 1, "武汉" });
dt.Rows.Add(new object[] { 3, 2, "汉口" });
dt.Rows.Add(new object[] { 4, 2, "汉阳" });
dt.Rows.Add(new object[] { 5, 4, "蔡甸" });
dt.Rows.Add(new object[] { 6, 4, "汉南" });
dt.Rows.Add(new object[] { 7, 1, "黄冈" });
dt.Rows.Add(new object[] { 8, 7, "黄冈镇级" });
dt.Rows.Add(new object[] { 9, 7, "黄冈村" });
dt.Rows.Add(new object[] { 10, 10, "南京" });
return dt;
}
}
public partial class Default : System.Web.UI.Page
{
DataView dv;
/// <summary>
/// 层次分割符
/// </summary>
const string STR_TREENODE = "┆┄";
const string STR_ID = "id";
const string STR_PARENTID = "parentid";
const string STR_DISPLAYNAME = "typename";
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
dv = new DataView(this.AreaSource);
dv.Sort = STR_PARENTID;
string schar = STR_TREENODE;
if (dv.Table.Rows.Count > 0)
{
RecursBind(-1,ref schar);
}
}
}
/// <summary>
/// 递归绑定DropDownList
/// </summary>
/// <param name="pid"></param>
/// <param name="schar"></param>
private void RecursBind(int pid,ref string schar)
{
if (pid == -1)
{
foreach (DataRow row in dv.Table.Rows)
{
if (Convert.ToInt32(row[STR_ID]) == Convert.ToInt32(row[STR_PARENTID]))
{
this.AreaList.Items.Add(new ListItem(schar + row[STR_DISPLAYNAME].ToString(), row[STR_ID].ToString()));
RecursBind(Convert.ToInt32(row[STR_ID]), ref schar);
}
}
}
else
{
DataRowView[] rows = dv.FindRows(pid);
foreach (DataRowView row in rows)
{
if (Convert.ToInt32(row[STR_ID]) != Convert.ToInt32(row[STR_PARENTID]))
{
schar += STR_TREENODE;
this.AreaList.Items.Add(new ListItem(schar + row[STR_DISPLAYNAME].ToString(), row[STR_ID].ToString()));
RecursBind(Convert.ToInt32(row[STR_ID]), ref schar);
}
}
schar = STR_TREENODE;
}
}
/// <summary>
/// 测试数据源
/// </summary>
private DataTable AreaSource
{
get
{
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn(STR_ID, typeof(int)));
dt.Columns.Add(new DataColumn(STR_PARENTID, typeof(int)));
dt.Columns.Add(new DataColumn(STR_DISPLAYNAME, typeof(string)));
dt.Rows.Add(new object[] { 1, 1, "湖北" });
dt.Rows.Add(new object[] { 2, 2, "江苏" });
dt.Rows.Add(new object[] { 3, 3, "浙江" });
dt.Rows.Add(new object[] { 4, 1, "黄冈" });
dt.Rows.Add(new object[] { 5, 4, "黄冈镇级" });
dt.Rows.Add(new object[] { 6, 5, "黄冈村" });
dt.Rows.Add(new object[] { 7, 3, "杭州" });
dt.Rows.Add(new object[] { 8, 2, "南京" });
return dt;
}
}
}
/// <summary>
/// 递归绑定DropDownList
/// </summary>
/// <param name="pid"></param>
/// <param name="schar"></param>
private void RecursBind(int pid, ref string schar, DropDownList dp)
{
if (pid == -1)
{
foreach (DataRow row in dv.Table.Rows)
{
if (Convert.ToInt32(row[STR_ID]) == Convert.ToInt32(row[STR_PARENTID]))
{
dp.Items.Add(new ListItem(schar + row[STR_DISPLAYNAME].ToString(), row[STR_ID].ToString()));
RecursBind(Convert.ToInt32(row[STR_ID]), ref schar,dp);
}
}
}
else
{
DataRowView[] rows = dv.FindRows(pid);
foreach (DataRowView row in rows)
{
if (Convert.ToInt32(row[STR_ID]) != Convert.ToInt32(row[STR_PARENTID]))
{
schar += STR_TREENODE;
dp.Items.Add(new ListItem(schar + row[STR_DISPLAYNAME].ToString(), row[STR_ID].ToString()));
RecursBind(Convert.ToInt32(row[STR_ID]), ref schar, dp);
}
}
schar = STR_TREENODE;
}
}