在Winform。。TreeView绑定数据
RoleManager tManager = new RoleManager();
DataTable dt = tManager.FindRoleRigthByRoleid(listRoleView.SelectedItems[0].Text);
TreeViewBinding(dt, liv_alreadyRole);
绑定数据方法:
private void TreeViewBinding(DataTable dt, TreeView tv)
{
tv.Nodes.Clear();
foreach (DataRow item_p in dt.Rows)
{
if (item_p["ParentNode"].ToString() == "00")
{
TreeNode nodep = new TreeNode(item_p["NodeName"].ToString());
nodep.Tag = item_p;
tv.Nodes.Add(nodep);
foreach (DataRow item_child in dt.Rows)
{
if (item_child["ParentNode1"].ToString() == item_p["Nodeid"].ToString())
{
TreeNode cnode = new TreeNode(item_child["NodeName"].ToString());
cnode.Tag = item_child;
nodep.Nodes.Add(cnode);
}
}
}
}
}
父节点:选中的时候 选中当前所有的子节点:
设置当前TreeViw AfterCheck的事件:
//event
void ListFullRoleAfterCheck(object sender, TreeViewEventArgs e) { if (e.Action == TreeViewAction.ByMouse) { if (e.Node.Checked) { //取消节点选中状态之后,取消所有父节点的选中状态 SetChildNode(e.Node, true); if (e.Node.Parent != null) { SetParentNode(e.Node, true); } } else { //取消节点选中状态之后,取消所有父节点的选中状态 SetChildNode(e.Node, false); //如果节点存在父节点,取消父节点的选中状态 if (e.Node.Parent != null) { SetParentNode(e.Node, false); } } } }
private void SetParentNode(TreeNode node, bool state)
{
TreeNode nodes = node.Parent;
nodes.Checked = state;
if (node.Parent.Parent != null)
{
SetParentNode(node, state);
}
}
private void SetChildNode(TreeNode node, bool state)
{
TreeNodeCollection nodes = node.Nodes;
if (nodes.Count > 0)
{
foreach (TreeNode cloneable in nodes)
{
cloneable.Checked = state;
SetChildNode(cloneable, state);
}
}
}