To support you in understanding this topic, please read also these articles: How to connect VB.NET to MySQL database How to binding MySQL data to DataGridView How to binding MySQL data to ComboBox List I divide this topic into 4 parts. Make sure you have read the previous article. How to Create, Read, Update, Delete (CRUD) - Part 1 Next step, we'll make edit and update data feature. How does users edit data? First, the will pick data row to edit, then double click on its row. Selected data will be displayed in input controls (textboxes). So, we need to write code under grdData_CellMouseDoubleClick event as following: Private Sub grdData_CellMouseDoubleClick( ByVal sender As Object, _ ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) _ Handles grdData.CellMouseDoubleClick txtCode.Text = grdData.CurrentRow.Cells(0).Value txtName.Text = grdData.CurrentRow.Cells(1).Value tbrEdit.Enabled = False txtCode.ReadOnly = True End Sub Set txtCode.ReadOnly = True, to make txtCode not editable because it contains the primary key. Besides double-clicking on the grid, the user can also edit by selecting row data then clicking the Edit button. So we need similar procedure under the tbrEdit_Click event. But I'm too lazy to retype, our procedures can be reused. The trick is to just call the sub-event as below. Private Sub tbrEdit_Click( ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles tbrEdit.Click grdData_CellMouseDoubleClick( Nothing , Nothing ) End Sub Before proceeding with the save procedure, I want to create a handler under tbrCancel_Click event. This works to clean controls and also cancel editing. This event procedure will be called several times while cleaning input controls, refresh data display, and canceling add new/edit process before it's saved. Private Sub tbrCancel_Click( ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles tbrCancel.Click txtCode.Text = String .Empty txtName.Text = String .Empty tbrEdit.Enabled = True txtCode.ReadOnly = False Data_Load() End Sub Code tbrEdit.Enabled = False as a sign that process is adding or editing data. Disabled are for editing. Because we use the same event for saving data added and edited. We already used tbrSave_Click for adding data, the code below has been modified to adjust edit/update process. Highlight text is to show the modification. Private Sub tbrSave_Click( ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles tbrSave.Click Dim myCommand As New MySqlCommand conn = New MySqlConnection() conn.ConnectionString = "server=localhost;user id=root;" & _ "password=;database=datapos" Try conn.Open() If tbrEdit.Enabled = True Then SQL = "INSERT INTO class (classcode, classname) VALUES " & _ "('" & txtCode.Text & "', '" & txtName.Text & "')" Else SQL = "UPDATE class SET classname = '" & txtName.Text & "' " & _ "WHERE classcode = '" & txtCode.Text & "'" End If myCommand.Connection = conn myCommand.CommandText = SQL myCommand.ExecuteNonQuery() If tbrEdit.Enabled = True Then MsgBox( "Data baru tersimpan" ) Else MsgBox( "Perubahan tersimpan" ) End If tbrCancel_Click(Nothing, Nothing) conn.Close() Catch myerror As MySqlException MessageBox.Show( "Error: " & myerror.Message) Finally conn.Dispose() End Try End Sub Let's try to run and edit/update some data. Sumber http://rani-irsan.blogspot.com