0

我有这样的层次结构。

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

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

以下是所选 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();
        }
    }
4

1 回答 1

1

首先一些提示:

  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 
        {
    
        }
    }
    

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

于 2013-07-05T06:07:14.297 回答