我通过设置datagridview.currentcell属性来阅读移动行指示符(小黑色插入符号)的方式。当我这样做时,它适当地设置当前单元格,但它仍然不会移动行指示器。我在向datagridview添加一行后执行此操作。
Private Sub dataGridView_RowsAdded(sender As Object, e As DataGridViewRowsAddedEventArgs) Handles dataGridView.RowsAdded
if(not dataGridView.rows(e.rowindex).isnewrow)
dataGridView.currentCell = dataGridView.Item(dataGridView.firstDisplayedCell.columnindex, e.rowindex)
end if
end sub
答案 0 :(得分:1)
我得到了一些工作,但这似乎是一种奇怪的方式。它是用c#编写的,但应该适用于VB。我设置了一个名为r的私有类级变量,用于存储新的行索引。在绘制行之前,我将currentcell重置为所需的单元格并调用DGV.Refresh()。这似乎做你想要的,但不是很漂亮。
{
dataGridView1.RowsAdded += dataGridView1_RowsAdded;
dataGridView1.RowPrePaint += dataGridView1_RowPrePaint;
}
bool temp = false;
int r;
void dataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{
if (!dataGridView1.Rows[e.RowIndex].IsNewRow)
{
r = e.RowIndex;
dataGridView1.CurrentCell = dataGridView1[dataGridView1.FirstDisplayedCell.ColumnIndex, r];
temp = true;
}
}
void dataGridView1_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e)
{
if (temp)
{
temp = false;
dataGridView1.CurrentCell = dataGridView1[dataGridView1.FirstDisplayedCell.ColumnIndex, r];
dataGridView1.Refresh();
}
}
答案 1 :(得分:1)
显然,根据一切如何被召唤。我在错误的地方这样做。在我的情况下,我是数据绑定所以只要有一些东西被添加到我的绑定列表中,所有这些都会被调用。也许我早些时候应该提到......
0 rowunshared
0 rowstatechanged
0 invalidated
0 rowleave
0 rowvalidating
0 rowvalidated
0 invalidated
0 rowstatechanged
0 invalidated
0 rowstatechanged
0 rowenter
2 invalidated
2 invalidated
2 invalidated
2 invalidated
2 invalidated
2 rowstatechanged
2 invalidated
2 rowstatechanged
2 rowsadded
2 rowenter
0 invalidated
0 invalidated
0 invalidated
0 invalidated
0 databindingcomplete
0和2是DGV中的行。 0是插入符号当前所在的那个; 2是刚添加的行。因此,根据这一点,我不应该尝试更改currentcell,而是在数据绑定完成事件中执行此操作。我通过在各自的处理程序和currentcell中使用console.writeline来完成所有这些打印,以查看当前行是哪一行。
private sub dataGridView_DataBindingComplete(sender as object, e as DataGridViewBindingCompleteEventArgs) handles dataGridView.DataBindingComplete
if(e.ListChangedType = ListChangedType.ItemAdded)
dataGridView.currentcell = dataGridView.item(dataGridView.firstDisplayedCell.columnindex, bindingList.count - 1)
End If
end sub