【问题标题】:Select first visible cell of new row in DataGridView在 DataGridView 中选择新行的第一个可见单元格
【发布时间】:2010-11-30 15:29:02
【问题描述】:

我正在尝试集中输入并在我添加到表单中的 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,试图解决这个问题。

【问题讨论】:

    标签: vb.net datagridview .net-2.0


    【解决方案1】:

    不要使用 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。

    【讨论】:

    • 如果行被排序为网格中的最后一行(数字)可能不是添加的最后一行(按时间顺序),这将不起作用。
    • @Mike 这是真的 - 我编辑了我的答案来处理这个案例。还有其他方法可以做您需要做的事情,但要探索它们,您必须提供更多细节。
    猜你喜欢
    • 2018-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-21
    相关资源
    最近更新 更多