2016-02-22 3 views
-1

Привет, ребята, мне нужна помощь в обновлении данных на моем datagridview. Сценарий - это когда я нажимаю кнопку «Поиск», он будет запрашивать соответствующие данные и отображать, что я хочу в datagridview. Затем я хочу обновить, если их изменения или удаленные данные из datagridview затем также будут обновляться в моей таблице mysql для новых данных или записей всякий раз, когда я нажимаю кнопку «Обновить». Проблема в том, что когда я нажимаю кнопку поиска, появляется сообщение «Таблица не содержит изменений для сохранения». это означает, что изменений нет, но я уже изменяю значения в datagridview. Кто-нибудь может мне помочь? Вот мой поиск кода кнопки:Обновление таблицы mysql в vb.net с использованием datagridview

Public Class Form1 
    Dim con As New MySqlConnection 
    Dim result As Integer 
    Dim cmd As New MySqlCommand 
    Dim da As New MySqlDataAdapter 
    Dim ds As New DataSet 
    Dim dr As MySqlDataReader 
    Dim sql As String 
    Dim dt As New DataTable 
Private Sub cmdSearch_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdSearch.Click 

    Dim conn As New MySqlConnection 
      conn.ConnectionString = ("server=127.0.0.1;user id=root;password=12345;database=dbsis3bkenth;") 
      Try 
       conn.Open() 
     sql = "SELECT LName,FName,MI FROM tblsisterbrother where IDNoBrodSis = '" & cbIDNo.Text & "'" 
     cmd = New MySqlCommand(sql, conn) 
     dr = cmd.ExecuteReader 
     dr.Read() 

     If dr.HasRows = True Then 
      MessageBox.Show("Record Found.!") 
     Else 
      MessageBox.Show("Record Unfound.!") 
     End If 
     dr.Close() 
    Catch ex As MySqlException 
     MessageBox.Show("Error in searching to database:error is:" & ex.Message) 
     Exit Sub 
    End Try 
    dr.Close() 
    RemoveHandler DataGridView1.CellValidating, AddressOf DataGridView1_CellValidating 
    da.SelectCommand = cmd 
    da.Fill(ds, "tblsisterbrother") 
    DataGridView1.DataSource = ds.Tables(0) 
    conn.Dispose() 
    conn.Close() 
End Sub 

Вот код моей кнопки обновления:

Private Sub cmdUpdate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdUpdate.Click 
    DataGridView1.EndEdit() 
    Dim dt As DataTable 
    dt = TryCast(DataGridView1.DataSource, DataTable) 
    If dt.GetChanges() Is Nothing Then 
     MessageBox.Show("The table contains no changes to save.") 
    Else 
     Dim builder = New MySqlCommandBuilder(da) 
     Dim rowsAffected As Integer = da.Update(dt) 
     If rowsAffected = 0 Then 
      MessageBox.Show("No rows were affected by the save operation.") 
     Else 
      MessageBox.Show(rowsAffected & " rows were affected by the save operation.") 
     End If 
    End If 
End Sub 

End Class

Пожалуйста, помогите мне, ребята, чтобы решить мою проблему :)

+0

Как не запутаться все эти дополнительные глобальные переменные объекта? У вас есть DataTable, объявленный для формы, тогда каждая процедура объявляет и создает новые каждый раз. ** Используйте ** уровень модуля один, и вам не придется бросать DS, чтобы добраться до стола. – Plutonix

ответ

0

В соответствии с MSDN page about GetChanges:

Получает копию DataTable, которая содержит все изменения, внесенные в нее с момента ее загрузки или последний вызов AcceptChanges.

Поскольку вы объявляете DataTable и загружаете его только один раз, он работает так, как ожидалось.

Чтобы заставить его работать, как вы хотите, вы должны будете использовать событие CellEditEnd и вызвать GetChanges() метод из DataGrid.DataSource, что-то вроде этого:

Private Sub DataGridView1_CellEndEdit(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellEndEdit 
    Dim Changes As DataTable 
    Changes = TryCast(DataGridView1.DataSource, DataTable).GetChanges() 
End Sub 
+0

Должен ли я ввести этот код в DataGridView1_CellEndEdit? и что следующий сэр? в кнопке обновления, есть ли какие-либо изменения, которые должны быть сделаны? –

+0

Было бы неплохо взглянуть на документацию о DataGridView, может быть, немного сложно заставить ее работать так, как вы ожидаете, и понимание ее поведения очень помогает. В любом случае, код, который я вам отправил, обновит базу данных после каждого редактирования. Если вы хотите обновить все сразу, когда вы нажимаете кнопку, вам просто нужно заменить ваши строки «Dim dt» и «dt =» на мои «Dim Changes» и «Changes =». –

+0

Здравствуйте, Sir, теперь я могу успешно обновить, теперь моя проблема заключается в том, что я могу обновить его, когда я очищаю данные, которые отображаются в моем datagridview, с помощью кнопки clear, затем я снова ищу, что он дублирует данные, затем снова очищается, а затем я снова ищу, он снова удваивает данные. Как это разрешить? –

Смежные вопросы