在datagridview中选择currentcell后,插入列中的插入符号不会移动

时间:2014-07-23 15:11:39

标签: vb.net datagridview

我通过设置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

2 个答案:

答案 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