C# 在winform C中检查父项时如何检查所有子项?
大家好,我正在运行时动态创建树视图。我的树视图在下面。当我检查主(父)项时,子注册主和类主要自动检查 但是我不能像这样编码Node4.checked=true。因为我在运行时创建了这个树视图 请提出任何有价值的建议 更新的问题-C# 在winform C中检查父项时如何检查所有子项?,c#,winforms,treeview,C#,Winforms,Treeview,大家好,我正在运行时动态创建树视图。我的树视图在下面。当我检查主(父)项时,子注册主和类主要自动检查 但是我不能像这样编码Node4.checked=true。因为我在运行时创建了这个树视图 请提出任何有价值的建议 更新的问题- private void MenuRights_Load(object sender, EventArgs e) { DataTable dt = new DataTable("data");
private void MenuRights_Load(object sender, EventArgs e)
{
DataTable dt = new DataTable("data");
dt.Columns.Add("id", typeof(int));
dt.Columns.Add("menu_name");
dt.Columns.Add("parentid", typeof(int));
dt.Columns.Add("menu_key");
hp.getConnStr();
MySqlConnection connection = new MySqlConnection(hp.myConnStr);
MySqlCommand command = new MySqlCommand("select * from mcs_menu_details", connection);
connection.Open();
MySqlDataReader Reader = command.ExecuteReader();
while (Reader.Read())
{
//dt.Rows.Add(new string[] { Reader[0].ToString(), Reader[1].ToString(), Reader[2].ToString(), Reader[3].ToString() });
DataRow row = dt.NewRow();
row["id"] = Convert.ToInt32(Reader[0].ToString());
row["menu_name"] = Reader[1].ToString();
if (Reader[2].ToString() != Convert.ToString(0))
{
row["parentid"] = Convert.ToInt32(Reader[2].ToString());
}
else { row["parentid"] = DBNull.Value; }
row["menu_key"] = Reader[3].ToString();
dt.Rows.Add(row);
}
connection.Close();
//Use a DataSet to manage the data
DataSet ds = new DataSet();
ds.Tables.Add(dt);
//add a relationship
ds.Relations.Add("rsParentChild", ds.Tables["data"].Columns["id"],ds.Tables["data"].Columns["parentid"]);
foreach (DataRow dr in ds.Tables["data"].Rows)
{
if (dr["parentid"] == DBNull.Value)
{
TreeNode root = new TreeNode(dr["menu_name"].ToString());
root.Tag = dr["menu_key"].ToString();
treeView1.Nodes.Add(root);
PopulateTree(dr, root);
}
}
treeView1.ExpandAll();
}
public void PopulateTree(DataRow dr, TreeNode pNode)
{
foreach (DataRow row in dr.GetChildRows("rsParentChild"))
{
TreeNode cChild = new TreeNode(row["menu_name"].ToString());
cChild.Tag = row["menu_key"].ToString();
pNode.Nodes.Add(cChild);
//Recursively build the tree
PopulateTree(row, cChild);
}
}
上面的代码帮助我创建树视图。这可能使你对我的问题有一个清晰的看法
提前感谢。您只需遍历树即可检查每个节点 让我们假设节点是树中被选中的
TreeNode
,您希望检查该TreeNode
CheckAllChildren(TreeNode node)
{
foreach(TreeNode child in node.Nodes)
{
child.Checked = true;
CheckAllChildren(child);
}
}
您可以简单地遍历树来检查每个节点 让我们假设节点是树中被选中的
TreeNode
,您希望检查该TreeNode
CheckAllChildren(TreeNode node)
{
foreach(TreeNode child in node.Nodes)
{
child.Checked = true;
CheckAllChildren(child);
}
}
请注意,一定要完全理解您在这里提出的问题 如果您动态创建treeview,我假设您正在使用
节点添加节点。添加(…)
。只需将Checked
指定为true
即可检查插入的节点
private void MainForm2_Load(object sender, EventArgs e)
{
TreeNode newNode = new TreeNode
{
Text = "Mytext",
Checked = true
};
this.treeView1.Nodes.Add(newNode);
}
如果要在运行时检查子节点,只需执行如下递归:
private void button1_Click(object sender, EventArgs e)
{
if (this.treeView1.SelectedNode != null)
{
this.CheckChildrens(this.treeView1.SelectedNode);
}
}
private void CheckChildrens(TreeNode node)
{
node.Checked = true;
foreach (TreeNode child in node.Nodes)
{
this.CheckChildrens(child);
}
}
但是不要直接调用
CheckChildrens(…)
,如果您想考虑新的已检查节点,请不要在没有警告的情况下从AfterCheck
事件处理程序调用,否则会出现一个很好的StackOverflow
异常。注意,一定要完全理解您在这里提出的问题
如果您动态创建treeview,我假设您正在使用节点添加节点。添加(…)
。只需将Checked
指定为true
即可检查插入的节点
private void MainForm2_Load(object sender, EventArgs e)
{
TreeNode newNode = new TreeNode
{
Text = "Mytext",
Checked = true
};
this.treeView1.Nodes.Add(newNode);
}
如果要在运行时检查子节点,只需执行如下递归:
private void button1_Click(object sender, EventArgs e)
{
if (this.treeView1.SelectedNode != null)
{
this.CheckChildrens(this.treeView1.SelectedNode);
}
}
private void CheckChildrens(TreeNode node)
{
node.Checked = true;
foreach (TreeNode child in node.Nodes)
{
this.CheckChildrens(child);
}
}
但是不要直接调用
CheckChildrens(…)
,如果您想考虑新的已检查节点,请不要在没有警告的情况下从AfterCheck
事件处理程序调用,否则会出现一个很好的StackOverflow
异常。此方法将调用自身。可以吗?可以,只要这个方法称自己为有限的,它就是完美的times@HarisHasan我尝试过这个方法,但该方法必须出现返回类型错误。我可以在这个中添加私有的void吗?哦,它可以工作,但是我想在按钮点击事件中调用这个CheckAllChildren函数。当treeview父对象单击自身时,我是如何做的。任何想法。这个方法会调用自己。它可以吗?是的,只要这个方法调用自己有限,它就完全可以times@HarisHasan我尝试过这个方法,但该方法必须出现返回类型错误。我可以在这个中添加私有的void吗?哦,它可以工作,但是我想在按钮点击事件中调用这个CheckAllChildren函数。当treeview父对象单击自身时,我是如何做的。任何想法。你需要重新思考这个用户界面。检查“系统”可能做什么?摩擦在“帮助”中最为明显。你需要重新思考这个UI。检查“系统”可能做什么?摩擦在“帮助”中最为明显。谢谢ken2k,请查看我的最新问题。这可能会给你一个明确的方式。谢谢ken2k,请查看我的更新问题。这可能会给你一个明确的方法。