根据树gridview中子节点的选择,在datagridview中显示特定行

时间:2013-07-05 05:56:44

标签: c# datagridview treeview

我有这样的层次结构。

          +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();
        }
    }

1 个答案:

答案 0 :(得分:1)

首先提供一些提示:

  1. 你正在施放2次,当1足够时(outva持有你的id,所以不需要转换)
  2. 为节点/子项触发节点鼠标单击,您必须以某种方式确定单击的类型(组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 
        {
    
        }
    }
    
  3. 当然,根据您创建树的方式,可能需要进行一些改进。