Vb.net DataGridView并刷新更改时的数据

Vb.net DataGridView并刷新更改时的数据,vb.net,datagridview,Vb.net,Datagridview,我有一个带有DataGridView的应用程序,它只是一组列和3个按钮 当我选择“获取潜在客户”按钮时,我希望将“已分配”列更改为“已分配”,由于“获取潜在客户”按钮在后台更新SQL表,因此我已将其正常工作 它没有做的是实时更新DataGridView,所以我添加了一个TableAdapter.Fill方法在我按下按钮之后,这里的问题是它移动光标的位置并重新绘制整个DataGridView 虽然它实现了我想要的,但从用户的角度来看,它看起来很差 我如何解决这个问题?如果我的滚动条被移过,我选择了

我有一个带有DataGridView的应用程序,它只是一组列和3个按钮

当我选择“获取潜在客户”按钮时,我希望将“已分配”列更改为“已分配”,由于“获取潜在客户”按钮在后台更新SQL表,因此我已将其正常工作

它没有做的是实时更新DataGridView,所以我添加了一个TableAdapter.Fill方法在我按下按钮之后,这里的问题是它移动光标的位置并重新绘制整个DataGridView

虽然它实现了我想要的,但从用户的角度来看,它看起来很差

我如何解决这个问题?如果我的滚动条被移过,我选择了“Get Lead”,并且列更改为“Assign”,那么DataGridView会立即反映数据库中的数据,而不会“重画”DataGridView

这是我单击相关按钮时的代码:

Private Sub LeadsDGV_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles LeadsDGV.CellContentClick

    Try

        Dim senderGrid = DirectCast(sender, DataGridView)

        If TypeOf senderGrid.Columns(e.ColumnIndex) Is DataGridViewButtonColumn AndAlso e.RowIndex >= 0 Then
            If LeadsDGV.Columns(e.ColumnIndex).Name = "GetLeadBtn" Then
                LMSMainTableAdapter.GetLead(ActiveDirectory.ADUsername, LeadsDGV.Rows(e.RowIndex).Cells(0).Value())
            ElseIf LeadsDGV.Columns(e.ColumnIndex).Name = "AssignLeadBtn" Then
                'MsgBox("Row Index " & e.RowIndex & " Column: " & LeadsDGV.Columns(e.ColumnIndex).Name)
            ElseIf LeadsDGV.Columns(e.ColumnIndex).Name = "DelLeadBtn" Then
                LMSMainTableAdapter.DeleteLead(ActiveDirectory.ADUsername, LeadsDGV.Rows(e.RowIndex).Cells(0).Value())
                LMSMainTableAdapter.Fill(LMSDataset.LMS_MainLeads)
            End If
        End If

    Catch ex As Exception
        Logging.ReportError(ex)
    End Try

End Sub

您可以在调用
Fill
方法之前保存当前单元格信息:

Dim intCurrentRow As Integer = Me.DataGridView1.CurrentCell.RowIndex
Dim intCurrentColumn As Integer = Me.DataGridView1.CurrentCell.ColumnIndex
并在使用
填充后还原此信息:

Me.DataGridView1.CurrentCell = Me.DataGridView1.Rows(intCurrentRow).Cells(intCurrentColumn)