当前位置:编程学习 > asp >>

ASP.NET C#生成下拉列表树

效果图:
代码:
[csharp]  
using System.Data;  
using System.Web.UI.WebControls;  
  
/// <summary>  
/// 根据DataTable生成下拉列表树  
/// </summary>  
public class DropDownListHelp  
{  
    private string gridline;  
    private DataTable dt;  
    public DropDownListHelp()  
    {  
        //  
        //TODO: 在此处添加构造函数逻辑  
        //  
    }  
    /// <summary>  
    /// 根据Datatable生成树形下拉菜单  
    /// </summary>  
    /// <param name="datatable"></param>  
    /// <param name="parentKeyField">上级节点关键字段</param>  
    /// <param name="parentKey">上级节点值</param>  
    /// <param name="keyField">本节点关键字段</param>  
    /// <param name="sortString">排序字符串</param>  
    /// <param name="ddl">DownList</param>  
    public void createDropDownTree(DataTable datatable, string parentKeyField, string parentKey, string keyField, string textField, string sortString, DropDownList ddl)  
    {  
        dt = datatable;  
        ddl.Items.Add(new ListItem("", ""));  
        addChildItems(parentKeyField, parentKey, keyField, textField, sortString, ddl);  
    }  
    /// <summary>  
    /// 递归生成树节点  
    /// </summary>  
    /// <param name="parentKeyField">上级节点关键字段</param>  
    /// <param name="parentKey">上级节点值</param>  
    /// <param name="keyField">本节点关键字段</param>  
    /// <param name="sortString">排序字符串</param>  
    /// <param name="ddl">DownList控件</param>  
    /// <returns></returns>  
    private void addChildItems(string parentKeyField, string parentKey, string keyField, string textField, string sortString, DropDownList ddl)  
    {  
        DataView dv = new DataView(dt, parentKeyField + "='" + parentKey + "'", sortString, DataViewRowState.CurrentRows);  
        int a = dv.Count;  
        if (dv.Count == 0)  
        {  
            return;  
        }  
        for (int i = 0; i < a; i++)  
        {  
            gridline = "";  
            dv.RowFilter = parentKeyField + "='" + parentKey + "'";  
            dv.Sort = sortString;  
            getTreeLine(parentKeyField, dv[i][parentKeyField].ToString(), keyField, dv[i][keyField].ToString(), sortString);  
            dv.RowFilter = parentKeyField + "='" + parentKey + "'";  
            dv.Sort = sortString;  
            ddl.Items.Add(new ListItem(gridline + (i == a - 1 ? "┗" : "┣") + dv[i][textField].ToString(), dv[i][keyField].ToString()));  
            addChildItems(parentKeyField, dv[i][keyField].ToString(), keyField, textField, sortString, ddl);  
        }  
        dv.Dispose();  
    }  
  
    /// <summary>  
    /// 回溯生成树的连接线  
    /// </summary>  
    /// <param name="parentKeyField">上级节点关键字段</param>  
    /// <param name="parentKey">上级节点值</param>  
    /// <param name="keyField">本节点关键字段</param>  
    /// <param name="nodeKey">本节点值</param>  
    /// <param name="sortString">排序字符串</param>  
    /// <returns></returns>  
    private void getTreeLine(string parentKeyField, string parentKey, string keyField, string nodeKey, string sortString)  
    {  
        //选择父层节点  
        DataView dv = new DataView(dt, keyField + "='" + parentKey + "'", sortString, DataViewRowState.CurrentRows);  
        if (dv.Count > 0)  
        {  
            //选择父节点同级节点  
            dv.RowFilter = parentKeyField + "='" + dv[0][parentKeyField].ToString() + "'";  
            dv.Sort = sortString;  
            for (int j = 0; j < dv.Count; j++)  
            {  
                if (dv[j][keyField].ToString() == parentKey)  
                {  
                    if (j == dv.Count - 1)  
                    {  
                        gridline = " " + gridline;  
                    }  
                    else  
                    {  
                        gridline = "┃" + gridline;  
                    }  
                }  
            }  
            getTreeLine(parentKeyField, dv[0][par
补充:Web开发 , ASP.Net ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,