在RowEnter事件处理程序中获取新行的行

本文关键字:新行 获取 RowEnter 事件处理 程序 | 更新日期: 2023-09-27 18:09:12

我有一个DataGridView与BindingSource。当我通过单击添加新行时,会触发RowEnter事件。出于某种原因,它是CellEvent,而不是RowEvent,所以我没有在参数中获得Row属性。RowIndex属性是0(有很多行- myDataGridView。Rows[0]是错误的)。我如何获得对实际行或其背后的DataBoundItem的引用?

编辑:似乎我实际上得到两个RowEnter事件。第一个RowIndex是0,第二个RowIndex是正确的。现在的问题是,我无法区分这些事件中的第一个事件和从实际第一行抛出的合法RowEnter。

在RowEnter事件处理程序中获取新行的行

您可以通过e.RowIndex获取

private void dataGridView1_RowEnter(object sender, 
    DataGridViewCellEventArgs e)
{
    for (int i = 0; i < dataGridView1.Rows[e.RowIndex].Cells.Count; i++)
    {
        dataGridView1[i, e.RowIndex].Style.BackColor = Color.Yellow;
    }
}

来源:DataGridView。RowEnter事件

您的问题可能与数据网格事件排序和责任的特殊性有关。

摘自http://social.msdn.microsoft.com/forums/windows/en-US/14c08e1f-7819-4687-8e4e-1df8632a8431/datagridviewselectionchanged-unexpected-behavior:

DataGridView。RowEnter发生在DataGridView之前。SelectionChanged所以获取最新数据DataGridView是毫无价值的。

SelectionChanged似乎是行更改时调用的最后一个事件。如果有人知道以后的事件,请告诉我。DataGridView。SelectionChanged有newdataGridView1.CurrentCell。RowIndex,如果用户单击中的新行DataGridView

DataGridView。SelectionChanged有旧的dataGridView1.CurrentCell。如果程序使用

移动行,则使用RowIndex:
    dataGridView1.ClearSelection();
    dataGridView1.CurrentCell = dataGridView1.Rows[3].Cells[0]; // Or whatever new row you want
    dataGridView1.Rows[3].Selected = true;

现在……, SelectedRows[0]。Index将返回新的RowIndex要么点击或编程移动!!

或者你的问题实际上是源于底层绑定和绑定集合的问题