无限极列表

写了一个DataTable数据源的
dropdownlist ID:AreaSource
public partial class _Default : System.Web.UI.Page
{
    DataView dv;
    
/// <summary>
    
/// 层次分割符
    
/// </summary>
    const string STR_TREENODE = "┆┄";
    
/// <summary>
    
/// 顶级父节点parentid
    
/// </summary>
    const int INT_TOPID = 0;

    
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(INT_TOPID, 
ref schar);
            }
        }
    }

    
/// <summary>
    
/// 递归绑定DropDownList
    
/// </summary>
    
/// <param name="pid"></param>
    
/// <param name="schar"></param>
    private void RecursBind(int pid,ref string schar)
    {
        
        DataRowView[] rows 
= dv.FindRows(pid);
        
if (rows.Length == 0) schar = STR_TREENODE;
        
foreach (DataRowView row in rows)
        {
            
if (pid != 0)          
            {
                schar 
+= STR_TREENODE;
            }
            
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);
        }
    }

    
/// <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[] { 10"湖北" });
            dt.Rows.Add(
new object[] { 20"江苏" });
            dt.Rows.Add(
new object[] { 30"浙江" });
            dt.Rows.Add(
new object[] { 41"黄冈" });
            dt.Rows.Add(
new object[] { 54"黄冈镇级" });
            dt.Rows.Add(
new object[] { 65"黄冈村" });
            dt.Rows.Add(
new object[] { 73"杭州" });
            dt.Rows.Add(
new object[] { 82"南京" });
            
return dt;
        }
    }
}
输出:
┆┄湖北
┆┄┆┄黄冈
┆┄┆┄┆┄黄冈镇级
┆┄┆┄┆┄┆┄黄冈村
┆┄江苏
┆┄┆┄南京
┆┄浙江
┆┄┆┄杭州
posted @ 2009-02-16 11:48  三颗屎  阅读(404)  评论(0编辑  收藏  举报