2010-11-30 94 views
0

我正在尝试将输入焦点并将编辑事件触发到添加到DataGridView窗体中的每个新行上。在DataGridView中选择新行的第一个可见单元格

这是我正在尝试用户来实现此目的的代码。

Private Sub grd_GoldAdders_RowsAdded(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewRowsAddedEventArgs) Handles grd_GoldAdders.RowsAdded 
     Dim grid As DataGridView = DirectCast(sender, DataGridView) 

     grid.ClearSelection() 

     If grid.Rows(e.RowIndex).Cells("grid_flag").FormattedValue = Constants.[New] Then 

      For Each cell As DataGridViewCell In grid.Rows(e.RowIndex).Cells 
       If Not cell.Visible Then Continue For 
       grid.CurrentCell = cell 
       grid.BeginEdit(False) 
       Exit For 
      Next 

     End If 

    End Sub 

“grid_flag”是一个隐藏单元,用于存储行的自定义状态。

之前添加行,这就是我们在表单上看到: Before we add a new row.

这就是我们看到的,当我们真正尝试,并添加一个新行: Row Add button clicked.

注意的是,列0,0和新行的第一个可见列被选中,但列0,0具有焦点。我不希望0,0得到选择或有焦点。我在此还看到该行指标在0行太指着...

这是我想看到的东西我点击添加按钮后: Desired outcome from clicking the Add button.

有谁知道我错了用代码?我在一天中的大部分时间都在努力解决这个问题。

回答

0

而不是使用您的DataGridView的RowAdded事件设置CurrentCell的,添加以下代码,无论你要添加一个新的记录您的DGV(在添加按钮的Click事件中,我假设):

''# Add the new record to your Data source/DGV. 

For Each row As DataGridViewRow In grd_GoldAdders.Rows 
    If row.Cells("grid_flag").FormattedValue = Constants.[New] Then 
     grd_GoldAdders.CurrentCell = row.Cells("AssySiteColumn") ''# I'm calling the first column in your DGV 'AssySiteColumn'. 
     grd_GoldAdders.BeginEdit(False) 
     Exit For 
    End If 
Next 

这代码只是循环遍历DGV中的所有行,并将您的Constants.[New]标志值指定为CurrentCell中第一行的第一个单元格。

+0

如果行被排序为网格中最后一行(数字)可能不是最后一行(按时间顺序)添加,这将无法正常工作。 – Mike 2010-11-30 19:17:45

相关问题