我正在尝试关注输入并在我添加到表单中的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”是一个隐藏单元格,用于存储行的自定义状态。
在添加行之前,这是我们在表单上看到的内容:
这是我们实际尝试添加新行时看到的内容:
请注意,列0,0和新行的第一个可见列都已选中,但列0,0具有焦点。我不希望0,0被选中或有焦点。我在这里也看到行指示器也指向第0行......
这是我在点击“添加”按钮后看到的内容:
有谁知道我的代码出错了?我在一天的大部分时间都在搜索SO以解决这个问题。
答案 0 :(得分:0)
不是使用DataGridView的RowAdded事件来设置CurrentCell,而是在向DGV添加新记录的位置添加以下代码(在我假设的Add按钮的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。