我有一个带有DataGridView的应用程序,它只是一组列和3个按钮。
当我选择“获取潜在客户”按钮时,我希望将“已分配”列更改为“已分配”,因为“获取潜在客户”按钮会在后台更新“SQL表”,所以我工作正常。
它没有做的是实时更新DataGridView,所以我按下按钮后添加了一个TableAdapter.Fill方法,这里的问题是它移动光标的位置并重绘整个DataGridView。
虽然它实现了我想要的东西,但从用户的角度看它看起来很糟糕。
如何解决这个问题,如果我的滚动条被移动并且我选择了“获取潜在客户”并且列更改为“分配”,即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
答案 0 :(得分:0)
您可以在调用Fill
方法之前保存当前的单元格信息:
Dim intCurrentRow As Integer = Me.DataGridView1.CurrentCell.RowIndex
Dim intCurrentColumn As Integer = Me.DataGridView1.CurrentCell.ColumnIndex
使用Fill
后恢复此信息:
Me.DataGridView1.CurrentCell = Me.DataGridView1.Rows(intCurrentRow).Cells(intCurrentColumn)