c# .net datagridview SelectionChanged

本文关键字:SelectionChanged datagridview net | 更新日期: 2023-09-27 17:50:00

我在为一件应该很简单的事情绞尽脑汁。已经一天了,所以我终于放弃了,我会问这个问题。我如何才能真正触发在。net的datagridview上的selectionChanged事件?我基本上想抓住行值时,用户双击/或单个单击任何地方的行。但我不能为我的生活让这个事件起火,即使我读到这里,这应该是我需要使用的even ?

private void dataGridView1_SelectionChanged(object sender, EventArgs e)
        {
            foreach (DataGridViewRow row in AddrGrid.SelectedRows)
            {
                string value1 = row.Cells[0].Value.ToString();
                string value2 = row.Cells[1].Value.ToString();
                //...
            }
        }

我尝试过类似的东西,但我绝望了,我点击数据网格单元格或行,这不会触发我错过了什么?

当我点击一个单元格时,我让这个事件触发。

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {

            Addresses.aTyp = AddrGrid.Rows[AddrGrid.CurrentCell.RowIndex].Cells["Address Type"].Value.ToString();
            Addresses.seq  =  AddrGrid.Rows[AddrGrid.CurrentCell.RowIndex].Cells["Sequence"].Value.ToString();
        }

但我喜欢捕捉双击或点击一行,而不仅仅是一个单元格。

c# .net datagridview SelectionChanged

private void dataGridView_SelectionChanged(object sender, EventArgs e) 
{
     foreach (DataGridViewRow row in dataGridView1.SelectedRows) 
     {
        string value1 = row.Cells[0].Value.ToString();
        string value2 = row.Cells[1].Value.ToString();
     }
 }

你可以使用

    private void AddrGrid_CellEnter(object sender, DataGridViewCellEventArgs e)
    {
        Addresses.aTyp = AddrGrid.Rows[AddrGrid.CurrentCell.RowIndex].Cells["Address Type"].Value.ToString();
        Addresses.seq = AddrGrid.Rows[AddrGrid.CurrentCell.RowIndex].Cells["Sequence"].Value.ToString();
    }

在您的网格对象中,我们将其命名为'foo'。你会做一些像…

foo.SelectionChanged += dataGridView1_SelectionChanged

您需要在某个地方这样做以连接事件。我通常在表单

的构造函数中这样做

关于DataGridview的selectionchanged事件的许多答案使用"DG1.SelectedRows(0)"。这是根本错误的。可能有多个行被选中,并且第一个被选中的行可能不是新选中的行。除非每次都要解析所有选定的行,否则应该使用DG1.Rows(DG1.CurrentCell.RowIndex)