【问题标题】:How to make the particular row get selected in datagridview based on treeview selection如何根据树视图选择在 datagridview 中选择特定行
【发布时间】:2010-09-09 07:31:53
【问题描述】:

我将有一个带有一些节点的树节点。我将在我的表单上有一个 datagridview。最初我会将一些数据加载到gridview中。现在,如果我在我的 trreview 中选择一个节点,我想将一个特定的行作为选定的行。

假设我的树视图如下

根 |-> 孩子 |->孩子1

如果我选择子项,我希望选择相应的行,如果子项 1 应该选择另一行。

有什么建议

【问题讨论】:

    标签: c# winforms datagridview treeview


    【解决方案1】:

    1) 您需要将节点映射到相应的数据网格行

    this.dataGridView1.Rows[0].Tag = id; // a node id
    

    2) 处理节点点击事件,通过id找到对应的行并选中

    if (tvwACH.SelectedNode.Parent != null)
    {
            int id  = (int)tvwACH.SelectedNode.Tag ; // make sure you've already assigned tag when creating Three nodes and data rows
            foreach(DataGridViewRow  row in this.dataGridView1.Rows)
            {
               int rowId = (int)row.Tag ;
                if(rowId == id)
                {
                  row.Selected = ture;
                }
                else
                {
                  row.Selected = false; //discard other rows 
                }
    
             }
    }
    

    【讨论】:

    • row.tag 和 row.selected 这些都没有得到
    • 固定到“DataGridViewRow”行
    • int id = tvwACH.SelectedNode.Tag 这会引发一个错误,因为无法将类型“object”隐式转换为“int”。
    • int id = (int)tvwACH.SelectedNode.Tag
    • int tag = (int)tvwACH.SelectedNode.Tag;处理 Nullreference 异常时抛出异常
    【解决方案2】:
    【解决方案3】:

    这是我写的代码

       private void tvwACH_AfterSelect(object sender, TreeViewEventArgs e)
        {
    
            string node = string.Empty;
            if (tvwACH.SelectedNode.Parent != null)
            {
                 node = tvwACH.SelectedNode.Text.ToString();
                if (node == "FileHeader")
                {
                    int tag = Convert.ToInt16(tvwACH.SelectedNode.Tag.ToString());
                    this.dataGridView1.Rows[0].Tag = tag;
                    foreach (DataGridViewRow row in dataGridView1.Rows)
                    {
                        int rowId = (int)row.Tag;
                        if (rowId == tag)
                        {
                            row.Selected = true;
                        }
                    }
                }
    
                string strSwitch = tvwACH.SelectedNode.Parent.Text;
                switch (strSwitch)
                {
                    case "ACH":
                        {
                            dataGridView1.Visible = true;
                            dataGridView1.Rows.Clear();
                            node = tvwACH.SelectedNode.Text;
                            StreamReader sr = new StreamReader(node);
                            while (sr.Peek() >= 0)
                            {
                                string line = sr.ReadLine();
                                dataGridView1.Rows.Add(rectype[line.Substring(0, 1)].ToString(), line);
                            }
                            sr.Close();
                        }
    
                        break;
    
                }
            }
        }
    

    【讨论】:

    • this.dataGridView1.Rows[X].Tag = tag; // 其中 x 是当前行,您必须将其添加到数据网格的新行并传递从当前(选定)节点获取的 id
    【解决方案4】:

    试试这个:

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        int flage = 1;
        private void button1_Click(object sender, EventArgs e)
        {
            flage = 1;
            for (int i = 0; i < dataGridView1.Rows.Count; i++)
            {
    
                if (dataGridView1.Rows[i].Selected)
                {
                    DataGridViewRow currentRow = dataGridView1.SelectedRows[0];
    
    
                    TreeNode node1 = new TreeNode(currentRow.Cells[1].Value.ToString());
                    TreeNode node2 = new TreeNode(currentRow.Cells[2].Value.ToString());
                    TreeNode node3 = new TreeNode(currentRow.Cells[3].Value.ToString());
                    TreeNode[] TreeArray = new TreeNode[] { node1,node2, node3 };
                    TreeNode finalnode = new TreeNode(currentRow.Cells[0].Value.ToString(), TreeArray);
    
                    treeView1.Nodes.Add(finalnode);
                    flage = 1;
                    break;
                }
                else
                {
                    flage = 0;
    
    
                }
            }
           if(flage==0)
            {
                MessageBox.Show("Row is not Selected Please select the row");
            }
        }
    
        private void button2_Click(object sender, EventArgs e)
        {
            treeView1.Nodes.Remove( treeView1.SelectedNode);
        }
    
        int flage2;
        private void button3_Click(object sender, EventArgs e)
        {
    
            for (int i = 0; i < dataGridView1.Rows.Count; i++)
            {
                if (dataGridView1.Rows[i].Selected)
                {
                    dataGridView1.Rows.Remove(dataGridView1.SelectedRows[0]);
                    flage2 = 1;
                    break;
                }
    
                else
                {
                    flage2 = 0;
                }
            }
            if (flage2 == 0)
            {
                MessageBox.Show("Row is not selected Please select the row");
            }
    
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-04
      • 1970-01-01
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      相关资源
      最近更新 更多