Buenas, 
 
hace poco escribí con un problema que tenía cargando un combo en un datagridview y cargandolo con datatable, asignando columna a columna.  
Antes no tenía combobox y hacía la carga con un dataset. Y realizaba los insert/update/delete con este código:    
Código vb:
Ver originalIf Ds.HasChanges() Then
            Dim cmd As SqlCommandBuilder
            cmd = New SqlCommandBuilder(Da)
            Dim sql1 As String = "select* from ocompra where fecha = '" & dtfecha.Value & "'"
            Da = New SqlDataAdapter(sql1, CnxBD)
            Da.Fill(Ds, "ocompra")
            Me.dgvventa.DataSource = Ds.Tables("ocompra")
            Da.InsertCommand = cmd.GetInsertCommand()
            Da.UpdateCommand = cmd.GetUpdateCommand()
            Da.DeleteCommand = cmd.GetDeleteCommand()
            Da.Update(Ds, "ocompra")
 
            Ds.Clear()
            MessageBox.Show("Datos actualizados", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information)
 
            Da = New SqlDataAdapter(sql1, CnxBD)
            Da.Fill(Ds, "ocompra")
            Me.dgvventa.DataSource = Ds.Tables("ocompra")
        Else
            MessageBox.Show("No hay cambios", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information)
        End If
  
Pero claro ahora que ya no utilizo el dataset evidentemente no me hace nada. He estado investigando y no he encontrado nada acerca de si paralelamente puedo cargar el dataset con la misma tabla y al finalizar y darle al botón de guardar pasar el datatable (editado) al dataset para que así compruebe si hay cambios y si los hay pues se realicen.  
O es mejor hacerlo con:    
Código vb:
Ver originalcmd.Parameters.AddWithValue("@comprobante", dgvventa(20, i).Value)
  
    
Gracias y un saludo.