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

时间:2014-08-26 06:16:40

标签: c# winforms treeview

以下是在Windows窗体的树视图控件中从数据库创建树结构的代码,我的表包含IdTitlePidDescId属性。是的,我只是在这样的按钮点击事件中调用此方法: - CreateTree(null, 0);

treeview的属性我已经checkboxes==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();
    }

3 个答案:

答案 0 :(得分:1)

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;
                }
            }

        }

private void checkNodes(TreeNode node, bool check) { foreach (TreeNode child in node.Nodes) { if (child.Checked == true) { MessageBox.Show(child.Text); } //MessageBox.Show(child.Text); checkNodes(child, check); } }

答案 1 :(得分:0)

这个问题已被多次询问,答案是:它可能,但不是微不足道。

原生TreeView控件不允许多重选择,但您可以从中导出子类并覆盖某些行为以使其有效。

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

请检查this site,它会提供允许多项选择的TreeView控件,以及技术细节:)

答案 2 :(得分:0)

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

在我自己的项目中,我使用ObjectListView代替。我将它用作WinForm ListViewTreeView控件的替代品。它支持多种选择,具有多列的树视图等等!