C# DataGridView CurrentRow不包括新行

C# DataGridView CurrentRow不包括新行,c#,datagridview,indexing,newrow,C#,Datagridview,Indexing,Newrow,我想获取DataGridView当前行的索引。问题是,如果当前行是新行,则CurrentRow设置为不是新行的最后一行。我无法检查要选择的行,因为如果选择一行,并不意味着它是当前行,并且不一定选择当前行 我可以获取新行的索引,但如何知道新行是否为当前行?此属性值可以解决您的问题吗 dataGridView1.CurrentCell.RowIndex 我通过以下代码连接到CellClick事件: private void uiEntries_CellClick(object sender, Dat

我想获取DataGridView当前行的索引。问题是,如果当前行是新行,则CurrentRow设置为不是新行的最后一行。我无法检查要选择的行,因为如果选择一行,并不意味着它是当前行,并且不一定选择当前行


我可以获取新行的索引,但如何知道新行是否为当前行?

此属性值可以解决您的问题吗

dataGridView1.CurrentCell.RowIndex


我通过以下代码连接到CellClick事件:

private void uiEntries_CellClick(object sender, DataGridViewCellEventArgs e)
{
    Console.WriteLine(e.RowIndex == uiEntries.NewRowIndex);
}

当该条件为真时,用户“选择”新行。根据这些信息,您可能需要实际插入一条新记录(使用..Rows.Add()方法),然后才能对其执行任何操作,因为新行实际上不存在于集合中;它只是一个占位符,用来表示新行。

我使用CellEnter事件将CurrentCell.RowIndex保存到表单变量中。单击另一个按钮会导致使用最后一个现有行索引而不是我们需要的新行索引触发此事件,因此测试焦点以忽略该情况

这避免了像处理CellClick事件一样,必须检查可能将光标移动到新行的所有键和鼠标操作

从VB自动转换的代码:

private int ActualCurrentRowIndex;

private void DataGridView1_CellEnter(object sender, System.Windows.Forms.DataGridViewCellEventArgs e)
{
    if (DataGridView1.Focused) {
        ActualCurrentRowIndex = DataGridView1.CurrentCell.RowIndex;
    }
}

嗨,在某种程度上我理解你的意思,但我不明白为什么你必须使用currentRow。你用它做什么?最重要的是,IordanI希望在用户单击按钮时用值填充当前行的单元格。如果该行恰好是新行,则应创建此行并用值填充单元格。解决方案中存在一个缺陷:当用户不是通过单击而是通过键盘更改当前单元格时,这将不起作用。CurrentCellChanged事件将起作用,但这不会发送单元格。然后,您可能还必须捕获击键,并查看是否应响应“移动”。例如,如果最后一行旁边的“向下箭头”,则表示(可能?)用户正在尝试添加行。然后,您可以执行与上面相同的步骤(插入新记录等)。虽然这很麻烦,但我认为这是解决方案。非常感谢!