【发布时间】:2014-09-10 01:32:26
【问题描述】:
我是 C# 新手,正在做第一个项目。
我有一个显示树节点和数据网格视图的 WINFORM。我希望从树节点中选择的项目转到数据网格视图。如果我选择 treenode 的父节点,所有子节点都会转到 datagridview,但如果我只是展开父节点并选择其中一个子节点,则不会进入 datagrid。 (选择树节点会触发一种从 sql 表中获取项目属性的方法,它是进入网格 + 节点值的属性)
When parent is selected 'if (e.Node.Nodes.Count > 0)' is true. 当未选择父级但子级为 'if (e.Node.Nodes.Count > 0)' 时为 false。
所以我的问题是我需要什么代码来查找选中/未选中的子节点?
一旦我得到正确的代码来查找子节点检查,如果子节点未选中,什么代码会将其移动到数据网格或从数据网格中删除?
private void getChildNodesToGrid()
{
// get all child nodes add to dataGridView
DataTable dt = getFieldsTable();
dgvColumns.DataSource = dt;
getAttributeSIDs();
}
private void tvFileMan_AfterCheck(object sender, TreeViewEventArgs e)
{
getFileAndColumns();
if (e.Node.Nodes.Count > 0)
{
this.CheckAllChildNodes(e.Node, e.Node.Checked);
// Checked a file so get fields and check all fields except subfiles.
// Use this event handler to process actions from check box click
e.Node.Expand();
foreach (TreeNode tn in e.Node.Nodes)
{
if (tn.Nodes.Count.Equals(0))
tn.Checked = e.Node.Checked;
}
getChildNodesToGrid();
}
谢谢,但我已经拥有了所有这些,我正在将所有节点都放到网格中。我遇到的问题是限制检查来自 filNode.Nodes 的子节点。我一直在玩“if (fileNode.Checked)”,但即使我可以在即时窗口中打印它也不是真的
?fileNode.Nodes[2]
{Text = "1 - CARD COLOR"}
base: {Text = "1 - CARD COLOR"}
BackColor: "{Name=0, ARGB=(0, 0, 0, 0)}"
Bounds: {X = 76 Y = 176 Width = 92 Height = 16}
Checked: true
private DataTable getFieldsTable()
{
//original
DataTable dt = new DataTable();
dt.Columns.Add("ColumnName");
dt.Columns.Add("FMFieldName");
.
.
.
dt.Columns.Add("PointsToFileNumber");
TreeNode fileNode = tvFileMan.SelectedNode;
foreach (TreeNode tn in fileNode.Nodes)
{
if (tn.Nodes.Count == 0)
{
if (fileNode.Checked)
{
DataRow dr = dt.NewRow();
dr["FMFieldName"] = tn.Text.Substring(tn.Text.IndexOf(" - ") + 4);
dr["FMFieldNumber"] = tn.Tag.ToString();
dr["FMFileNumber"] = tn.Parent.Tag.ToString();
dr["ColumnName"] = suggestName(tn.Text.Substring(tn.Text.IndexOf(" - ") + 4));
//added by TEA 9/3/14 to get PointsToFileNumber in TreeNode
if (dr["PointsToFileNumber"].ToString().Length > 0)
{
dr["ColumnName"] = suggestName(tn.Text.Substring(tn.Text.IndexOf(" - ") + 4) + "txt");
}
dt.Rows.Add(dr);
}
}
}
return dt;
}
【问题讨论】:
标签: c# winforms datagridview treenode