C# ComboBox 树形结构

        public FormTemplateManager()
        {
            InitializeComponent();//IETD_FILE_TEMPLATE_V
            this.MaximizeBox = false;

            this.comboBoxStructureType.TreeView.Nodes.Clear();
            string sql = "SELECT * FROM IETD_SYSTEM_STRUCTURE T";
            System.Data.DataTable dt = DbHelperOra.Query(sql).Tables[0];
           if(dt.Rows.Count>0)
           {
               TreeNode root = new TreeNode("文档分类树", 1, 2);
               CreateTreeViewRecursive(root.Nodes, dt, dt.Select("PARENT_NODE_ID='-1'")[0]["ID"].ToString());
               comboBoxStructureType.TreeView.Nodes.Add(root);
           }
        }


        /// 递归查询
        /// </summary>
        /// <param name="nodes">TreeView的节点集合</param>
        /// <param name="dataSource">数据源</param>
        /// <param name="parentid"></param>
        private void CreateTreeViewRecursive(TreeNodeCollection nodes, DataTable dataSource, string id)
        {
            string filter;
            filter = string.Format("PARENT_NODE_ID='" + id + "'");
            DataRow[] drarr = dataSource.Select(filter);
            TreeNode node;
            foreach (DataRow dr in drarr)
            {
                node = new TreeNode();
                node.Text = (string)dr["NODE_NAME"];
                node.Tag = (string)dr["ID"];
                nodes.Add(node);
                CreateTreeViewNodes(node.Nodes, dataSource, (string)node.Tag);
            }
        }

        private void CreateTreeViewNodes(TreeNodeCollection nodes, DataTable dataSource, string id)
        {
            string filter;
            filter = string.Format("PARENT_NODE_ID='" + id + "'");
            DataRow[] drarr = dataSource.Select(filter);
            TreeNode node;
            foreach (DataRow dr in drarr)
            {
                node = new TreeNode();
                node.Text = (string)dr["NODE_NAME"];
                node.Tag = (string)dr["ID"];
                nodes.Add(node);
                CreateTreeViewNodes(node.Nodes, dataSource, (string)node.Tag);
            }
        }

namespace IETD.Forms
{
    class ComboBoxTreeView : ComboBox
    {
        private const int WM_LBUTTONDOWN = 0x201, WM_LBUTTONDBLCLK = 0x203;
        ToolStripControlHost treeViewHost;
        ToolStripDropDown dropDown;
        public ComboBoxTreeView()
        {
            TreeView treeView = new TreeView();
            treeView.AfterSelect += new TreeViewEventHandler(treeView_AfterSelect);
            treeView.BorderStyle = BorderStyle.None;

            treeViewHost = new ToolStripControlHost(treeView);
            dropDown = new ToolStripDropDown();
            dropDown.Width = this.Width;
            dropDown.Items.Add(treeViewHost);
        }
        public void treeView_AfterSelect(object sender, TreeViewEventArgs e)
        {
            if (TreeView.SelectedNode.Nodes.Count > 0)
            {
                MessageBox.Show("请选择叶子节点!");
                this.Text = "";
            }
            else
            {
                this.Text = TreeView.SelectedNode.Text;
                dropDown.Close();
            }
        }
        public TreeView TreeView
        {
            get { return treeViewHost.Control as TreeView; }
        }
        private void ShowDropDown()
        {
            if (dropDown != null)
            {
                treeViewHost.Size = new Size(DropDownWidth - 2, DropDownHeight);
                dropDown.Show(this, 0, this.Height);
            }
        }
        protected override void WndProc(ref Message m)
        {
            if (m.Msg == WM_LBUTTONDBLCLK || m.Msg == WM_LBUTTONDOWN)
            {
                ShowDropDown();
                return;
            }
            base.WndProc(ref m);
        }
        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                if (dropDown != null)
                {
                    dropDown.Dispose();
                    dropDown = null;
                }
            }
            base.Dispose(disposing);
        }
    }
}

 

你可能感兴趣的:(String,C#,filter,dropdown,null,structure)