C# 如何使用C和Visual Studio 2013从Treeview控件一次选择多个节点

C# 如何使用C和Visual Studio 2013从Treeview控件一次选择多个节点,c#,winforms,treeview,C#,Winforms,Treeview,下面是从windows窗体的treeview控件中的数据库创建树结构的代码,my table包含Id、Title、Pid、DescId属性。是的,我只是在一个按钮点击事件中调用这个方法,就像这样:-CreateTreenull,0 属性我已经设置了复选框==true,所以当树填充时,它们与树视图的复选框和节点一起出现 //Create the tree from the database private void CreateTree(TreeNode n, int hdrID)

下面是从windows窗体的treeview控件中的数据库创建树结构的代码,my table包含Id、Title、Pid、DescId属性。是的,我只是在一个按钮点击事件中调用这个方法,就像这样:-CreateTreenull,0

属性我已经设置了复选框==true,所以当树填充时,它们与树视图的复选框和节点一起出现

    //Create the tree from the database
    private void CreateTree(TreeNode n, int hdrID)
    {
        System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=D:\DNP\Opening ppt\Opening ppt\Builder.mdf;MultipleActiveResultSets = True;Integrated Security=True;Connect Timeout=30");
        con.Open();
        SqlCommand cmd = new SqlCommand("SELECT Id,Title FROM Presentation WHERE Pid=" + hdrID, con);
        SqlDataReader rdr = cmd.ExecuteReader();
        while (rdr.Read())
        {
            TreeNode t = new TreeNode(rdr["Title"].ToString());
            CreateTree(t, Convert.ToInt16(rdr["Id"].ToString()));
            if (n == null)
            {
                treeView1.Nodes.Add(t);
                //t.ImageIndex = 0;
            }
            else
            {
                n.Nodes.Add(t);
            }
        }
        rdr.Close();
    }

这个问题已经被问了好几次,答案是:这是可能的,但不是微不足道的

原生TreeView控件不允许多重选择,但您可以从中派生一个子类并重写某些行为以使其工作

就我个人而言,我不建议这样做,因为要做到这一点并不容易。我建议您搜索一些可以完成此任务的控件

请检查,它提供了一个允许多个选择的TreeView控件,以及技术细节:

我同意-使用TreeView控件进行多个选择确实很痛苦

在我自己的项目中,我使用了。我使用它来替代WinForm ListView和TreeView控件。它支持多个选择、具有多列的树视图以及更多

private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
        {
            if (e.Action != TreeViewAction.Unknown)
            {
                 if (busy) return;
                busy = true;
                try
                {
                    TreeNode _node = e.Node;

                    checkNodes(e.Node, e.Node.Checked);
                    if (e.Node.Checked)
                    {
                        MessageBox.Show(e.Node.Text);
                    }
                }


                finally
                {
                    busy = false;
                }
            }

        }
私有无效检查节点异常节点,布尔检查 { 节点中的每个树节点子节点 { 如果child.Checked==true { MessageBox.Showchild.Text; } //MessageBox.Showchild.Text; checkNodeschild,check; }
}

你能帮我吗?如何使用objectListView而不是treeview控件。我渴望学习它。如果可能的话,你可以发送一些关于这个主题的poc给nitesh943@gmail.com.仅一个代码示例对您没有多大帮助。用数据填充ObjectListView的方式与传统的ListView和TreeView非常不同。您首先需要了解这种新方法。一旦理解了这一点,ObjectListView就很容易使用。图书馆的作者对它做了大量的解释。开始阅读。本文介绍了如何使用您所需要的TreeListView。ObjectListView源代码中还包含一个示例项目,这是一篇关于CodeProject的好文章,详细解释了ObjectListView。