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

时间:2014-06-19 08:58:25

标签: c# datagridview

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

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

2 个答案:

答案 0 :(得分:1)

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

取自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有新的   dataGridView1.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   点击或编程移动!!!

或者你的问题实际上源于底层绑定和绑定集合中的一些问题。

答案 1 :(得分:0)

你可以通过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 Event