Я новичок в C # и работаю над первым проектом.
У меня есть WINFORM, который отображает treenode и datagridview. Я хочу, чтобы выбранные элементы из treenode перешли в datagridview. Если я выберу родительский узел treenode, все дочерние элементы перейдут в datagridview, но если я просто разверну родительский узел и выберу одного из дочерних, ничего не перейдет в datagrid. (выбор treenode запускает метод для получения атрибутов элемента из таблицы sql, и это атрибуты, которые переходят в сетку + значение узла)
Когда выбран родительский элемент, 'if (e.Node.Nodes.Count> 0)' истинно. Когда родительский элемент не выбран, но дочерний элемент, if (e.Node.Nodes.Count> 0) является ложным.
Итак, мой вопрос: какой код мне нужен, чтобы найти дочерние узлы, которые отмечены / не отмечены?
Как только я получу правильный код для проверки дочернего узла, какой код перемещает его в сетку данных или удаляет из сетки данных, если дочерний узел не отмечен?
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;
}