我有这样的层次结构。
+GroupID
------StringID
------StringID
------StringID
+GroupID
------StringID
现在,我知道在单击GroupID时如何显示datagridview
中的特定行。但是,当单击StringID时,我不知道如何获取树中当前所选节点的值,并根据GroupID和StringID *在datagridview
上显示它。
以下是所选GroupID的代码,并显示在datagridview
:
private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
int outva;
dataGridView1.ClearSelection();
if (int.TryParse((e.Node.Text), out outva))
{
save=Convert.ToInt16(e.Node.Text);
int row = dataGridView1.Rows.Count;
((DataTable)dataGridView1.DataSource).DefaultView.RowFilter = "Groupid =" +save;
}
else {
// dataGridView1.Rows[i].Visible = false ;
// dataGridView1.Columns.Clear();
}
}
答案 0 :(得分:1)
首先提供一些提示:
为节点/子项触发节点鼠标单击,您必须以某种方式确定单击的类型(组ID或字符串ID)。例如,检查节点是否具有父节点,如果是,则为字符串标识,或者如果节点具有子节点,则它是组标识
private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
int outva;
dataGridView1.ClearSelection();
if (int.TryParse((e.Node.Text), out outva))
{
//save=Convert.ToInt16(e.Node.Text); //not needed
string filterBy;
if (e.Node.Parent != null)
{
filterBy = "GroupId = " + outva;
}
else
{
filterBy = "StringId = " outva;
}
//int row = dataGridView1.Rows.Count; // not needed
((DataTable)dataGridView1.DataSource).DefaultView.RowFilter = filterBy;
}
else
{
}
}
当然,根据您创建树的方式,可能需要进行一些改进。