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


    效果图:

    代码:

    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][parentKeyField].ToString(), keyField, dv[0][keyField].ToString(), sortString);
            }
            dv.Dispose();
        }
    }


    调用:

                DropDownListHelp ddlHelper = new DropDownListHelp();
                ddlHelper.createDropDownTree(dt, "parentID", "1", "ID","Text", "Text asc", DropDownList1);
    


     

  • 相关阅读:
    Asp.Net MVC3 简单入门第一季(五) 通过Asp.Net MVC的区域功能实现将多个MVC项目部署到一个站点
    Asp.Net MVC3 简单入门第一季(一)环境准备
    Asp.Net MVC3 简单入门第一季(三)详解Controller之Filter
    Entity Framework快速入门一对零到一关系处理
    Html5 学习系列(一)认识HTML5
    程序员体检完事后的感受
    Asp.Net MVC3 简单入门第一季 【索引贴】
    实在忍不住,【转】一篇好文章!题目:【转】想要成功,请记住!
    Html5 学习系列(二)HTML5新增结构标签
    大学应该怎么读?
  • 原文地址:https://www.cnblogs.com/apollokk/p/6713920.html
Copyright © 2020-2023  润新知