根据从树网格视图中选择的子节点,在数据网格视图中显示特定行

本文关键字:视图 网格 数据网 数据 显示 树网 选择 子节点 | 更新日期: 2023-09-27 18:21:00

我有这样的层次结构。

          +GroupID
          ------StringID
          ------StringID
          ------StringID
          +GroupID
          ------StringID

现在我知道了如何在单击GroupID时显示datagridview中的特定行。但我不知道如何在单击StringID时获得树中当前选定节点的值,并根据GroupID和StringID*将其显示在datagridview上。

以下是选择并显示在datagridview:上的GroupID的代码

    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. 你施法2次,1次就足够了(outva持有你的id,所以不需要转换)
  2. 节点鼠标点击是为节点/子节点触发的,您必须以某种方式确定点击的类型(组id或字符串id)。例如,检查节点是否有父节点,如果有,则为字符串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 
        {
        }
    }
    

当然,根据您创建树的方式,可能需要一些改进。