打造DropDownList,TreeView,ListBox无限极分类目录树

        #region DropDownList无限递归显示层次关系
        /// <summary>
        /// 创建无限分级下拉列表框 
        /// </summary>
        /// <param name="ddlst">下拉控件</param>
        /// <param name="dt">源DataTable</param>
        /// <param name="text">text字段</param>
        /// <param name="value">value字段</param>
        /// <param name="parentid">深度字段 例如parentid</param>
        public static void CreateLevelDropDown(DropDownList ddlst, DataTable dt, string text, string value, string parentid)
        {
            ArrayList allItems = new ArrayList();
            DataRow[] rows = dt.Select(parentid + "=0");
            foreach (DataRow row in rows)
                CreateLevelDropDownAssistant(dt, ref   allItems, row, string.Empty, text, value, parentid);
            ListItem[] items = new ListItem[allItems.Count];
            allItems.CopyTo(items);
            ddlst.Items.AddRange(items);
        }

        /// <summary>
        /// 递归绑定子节点
        /// </summary>
        /// <param name="dt">源DataTable</param>
        /// <param name="items">数组</param>
        /// <param name="parentRow">当前节点</param>
        /// <param name="curHeader">前缀</param>
        /// <param name="text">text字段</param>
        /// <param name="value">value字段</param>
        /// <param name="parentid">深度字段 例如parentid</param>
        private static void CreateLevelDropDownAssistant(DataTable dt, ref   ArrayList items, DataRow parentRow, string curHeader, string text, string value, string parentid)
        {
            ListItem newItem = new ListItem(curHeader + Until.CutString(parentRow[text].ToString(), 18, true), parentRow[value].ToString());
            items.Add(newItem);
            DataRow[] rows = dt.Select(parentid + "=" + newItem.Value);
            for (int i = 0; i < rows.Length - 1; i++)
                CreateLevelDropDownAssistant(dt, ref   items, rows[i], curHeader.Replace("┣", "┃").Replace("┗", "┣") + "┣", text, value, parentid);

            if (rows.Length > 0)
                CreateLevelDropDownAssistant(dt, ref   items, rows[rows.Length - 1], curHeader.Replace("┣", "┃").Replace("┗", "┣") + "┗", text, value, parentid);
        }

        #endregion

        #region TreeView 无限递归显示层次关系目录树
        /// <summary>
        /// 创建无限分级目录树TreeView
        /// </summary>
        /// <param name="treeview">TreeView空间</param>
        /// <param name="dt">数据源DataTable</param>
        /// <param name="text">text字段</param>
        /// <param name="value">value字段</param>
        /// <param name="parentid">深度字段 例如parentid</param>
        public static void CreateLevelTreeView(TreeView treeview, DataTable dt, string text, string value, string parentid)
        {
            DataView dv = dt.DefaultView;
            dv.RowFilter = parentid + "=0";
            foreach (DataRowView drv in dv)
            {
                TreeNode node = new TreeNode();
                node.Text = drv[text].ToString();
                node.Value = drv[value].ToString();
                node.Expanded = false;
                treeview.Nodes.Add(node);
                CreatTreeViewChildNode(dv, node, text, value, parentid);
            }
        }

        /// <summary>
        /// 递归绑定子节点
        /// </summary>
        /// <param name="dv">源DataView</param>
        /// <param name="parentNode">当前节点</param>
        /// <param name="text">text字段</param>
        /// <param name="value">value字段</param>
        /// <param name="parentid">深度字段 例如parentid</param>
        private static void CreatTreeViewChildNode(DataView dv, TreeNode parentNode, string text, string value, string parentid)
        {
            dv.RowFilter = parentid + "=" + parentNode.Value;
            foreach (DataRowView row in dv)
            {
                TreeNode replyNode = new TreeNode();
                replyNode.Text = row[text].ToString();
                replyNode.Value = row[value].ToString();
                replyNode.Expanded = false;
                parentNode.ChildNodes.Add(replyNode);
                CreatTreeViewChildNode(dv, replyNode, text, value, parentid);
            }
        }

        /// <summary>
        /// 创建无限分级目录树TreeView
        /// </summary>
        /// <param name="treeview">TreeView空间</param>
        /// <param name="dt">数据源DataTable</param>
        /// <param name="text">text字段</param>
        /// <param name="value">value字段</param>
        /// <param name="url">url字段</param>
        /// <param name="parentid">深度字段 例如parentid</param>
        public static void CreateLevelTreeView(TreeView treeview, DataTable dt, string text, string value, string url, string parentid)
        {
            DataView dv = dt.DefaultView;
            dv.RowFilter = parentid + "=0";
            foreach (DataRowView drv in dv)
            {
                TreeNode node = new TreeNode();
                node.Text = drv[text].ToString();
                node.Value = drv[value].ToString();
                node.NavigateUrl = drv[url].ToString();
                node.Expanded = false;
                treeview.Nodes.Add(node);
                CreatTreeViewChildNode(dv, node, text, value, url, parentid);
            }
        }

        /// <summary>
        /// 递归绑定子节点
        /// </summary>
        /// <param name="dv">源DataView</param>
        /// <param name="parentNode">当前节点</param>
        /// <param name="text">text字段</param>
        /// <param name="value">value字段</param>
        /// <param name="url">url字段</param>
        /// <param name="parentid">深度字段 例如parentid</param>
        private static void CreatTreeViewChildNode(DataView dv, TreeNode parentNode, string text, string value, string url, string parentid)
        {
            dv.RowFilter = parentid + "=" + parentNode.Value;
            foreach (DataRowView row in dv)
            {
                TreeNode replyNode = new TreeNode();
                replyNode.Text = row[text].ToString();
                replyNode.Value = row[value].ToString();
                replyNode.NavigateUrl = row[url].ToString();
                replyNode.Expanded = false;
                parentNode.ChildNodes.Add(replyNode);
                CreatTreeViewChildNode(dv, replyNode, text, value, url, parentid);
            }
        }
        #endregion

        #region 创建无限分级ListBox
        /// <summary>
        /// 创建无限分级ListBox 
        /// </summary>
        /// <param name="ddlst">ListBox控件</param>
        /// <param name="dt">源DataTable</param>
        /// <param name="text">text字段</param>
        /// <param name="value">value字段</param>
        /// <param name="parentid">深度字段 例如parentid</param>
        public static void CreateLevelListBox(ListBox ddlst, DataTable dt, string text, string value, string parentid)
        {
            ArrayList allItems = new ArrayList();
            DataRow[] rows = dt.Select(parentid + "=0");
            foreach (DataRow row in rows)
                CreateLevelListBoxAssistant(dt, ref   allItems, row, string.Empty, text, value, parentid);
            ListItem[] items = new ListItem[allItems.Count];
            allItems.CopyTo(items);
            ddlst.Items.AddRange(items);
        }

        /// <summary>
        /// 递归绑定子节点
        /// </summary>
        /// <param name="dt">源DataTable</param>
        /// <param name="items">数组</param>
        /// <param name="parentRow">当前节点</param>
        /// <param name="curHeader">前缀</param>
        /// <param name="text">text字段</param>
        /// <param name="value">value字段</param>
        /// <param name="parentid">深度字段 例如parentid</param>
        private static void CreateLevelListBoxAssistant(DataTable dt, ref   ArrayList items, DataRow parentRow, string curHeader, string text, string value, string parentid)
        {
            ListItem newItem = new ListItem(curHeader + Until.CutString(parentRow[text].ToString(), 18, true), parentRow[value].ToString());
            items.Add(newItem);
            DataRow[] rows = dt.Select(parentid + "=" + newItem.Value);
            for (int i = 0; i < rows.Length - 1; i++)
                CreateLevelListBoxAssistant(dt, ref   items, rows[i], curHeader.Replace("┣", "┃").Replace("┗", "┣") + "┣", text, value, parentid);

            if (rows.Length > 0)
                CreateLevelListBoxAssistant(dt, ref   items, rows[rows.Length - 1], curHeader.Replace("┣", "┃").Replace("┗", "┣") + "┗", text, value, parentid);
        }
        #endregion

你可能感兴趣的:(打造DropDownList,TreeView,ListBox无限极分类目录树)