2015-10-30 2 views
-1

У меня есть приложение с DataGridView, это просто набор столбцов и 3 кнопки.DataGridView и обновление данных об изменениях

Когда я выбираю кнопку «Get Lead», я хочу, чтобы столбец «Назначенный» изменился на «Assigned», который у меня получился нормально, когда кнопка «Lead Lead» обновляет таблицу 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

Вы можете сохранить текущую информацию ячейки перед вызовом 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) 
Смежные вопросы