在DataGridView中选择新行的第一个可见单元格

时间:2010-11-30 15:29:03

标签: vb.net datagridview .net-2.0

我正在尝试关注输入并在我添加到表单中的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.

有谁知道我的代码出错了?我在一天的大部分时间都在搜索SO以解决这个问题。

1 个答案:

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