VB.NET DataGridView Button Not Removing Current Row

Lynchie435
Lynchie435 used Ask the Experts™
on
Afternoon,

I have a DataGridView with records in it. I have added an Unbound column to the end of the DataSet that deletes the record and updates a SQL table.

I am able to click the delete button and it remove my DataGridView Row, however the SQL inserts the SQL for the record below the one I have selected the delete on.

My code is below is anyone able to explain this behaviour to me?

    Private Sub DataGridView1_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick
        'Declare Variables
        Dim strSQL As String
        Dim cmd As SqlCommand
        Dim i As Integer
        'Dim msg As String = _
        'String.Format("Editing Cell at ({0}, {1})", _
        'e.ColumnIndex, e.RowIndex)

        i = e.ColumnIndex

        If i <> 8 Then

            DataGridView1.Columns(i).ReadOnly = True

        Else

            LiveTableBindingSource.RemoveAt(e.RowIndex)

            strSQL = "INSERT INTO [MyDB].[dbo].[Database]" & _
                    " VALUES ('" & DataGridView1.Rows(e.RowIndex).Cells(0).Value() & "','" & DataGridView1.Rows(e.RowIndex).Cells(1).Value() & "','" & DataGridView1.Rows(e.RowIndex).Cells(2).Value() & "','" & DataGridView1.Rows(e.RowIndex).Cells(3).Value() & "','" & DataGridView1.Rows(e.RowIndex).Cells(4).Value() & "','Removed','" & Date.Now.ToString & "','" & DataGridView1.Rows(e.RowIndex).Cells(7).Value() & "')"

            conn.Open()
            cmd = New SqlCommand(strSQL, conn)
            cmd.ExecuteNonQuery()
            conn.Close()

            Me.History_Table_TableAdapter.Fill(Me.FreshSystemsDataSet.History_Table)

        End If

    End Sub

Open in new window

Comment
Watch Question

Do more with

Expert Office
EXPERT OFFICE® is a registered trademark of EXPERTS EXCHANGE®
Looks like you are deleting the row from the datagridview and then referencing the row index before the dgv is reloaded.
You should be able to just change the order of these 2 statements.  First you set the strSQL value using the clicked row, then remove the row, execute the SQL command and reload the datagridview

            strSQL = "INSERT INTO [MyDB].[dbo].[Database]" & _
                    " VALUES ('" & DataGridView1.Rows(e.RowIndex).Cells(0).Value() & "','" & DataGridView1.Rows(e.RowIndex).Cells(1).Value() & "','" & DataGridView1.Rows(e.RowIndex).Cells(2).Value() & "','" & DataGridView1.Rows(e.RowIndex).Cells(3).Value() & "','" & DataGridView1.Rows(e.RowIndex).Cells(4).Value() & "','Removed','" & Date.Now.ToString & "','" & DataGridView1.Rows(e.RowIndex).Cells(7).Value() & "')"

LiveTableBindingSource.RemoveAt(e.RowIndex)

Author

Commented:
Had every inkling it was something basic but I had been coding all day that I had overlooked it.

Many heads and all that.

Cheers mate much appreciated.

James

Do more with

Expert Office
Submit tech questions to Ask the Experts™ at any time to receive solutions, advice, and new ideas from leading industry professionals.

Start 7-Day Free Trial