以下是在Windows窗体的树视图控件中从数据库创建树结构的代码,我的表包含Id
,Title
,Pid
,DescId
属性。是的,我只是在这样的按钮点击事件中调用此方法: - 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();
}
答案 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 ListView
和TreeView
控件的替代品。它支持多种选择,具有多列的树视图等等!