RE:DataGridView, NO ME DEJA MODIFICAR DATOS
Supongo que el Dataset con el que cargas el Grid es resultado de una consulta Sql no? Una vez yo tube un problema similiar y era que despues de cargar un Grid, tenia que agregarle registros o quitarselos cual fuera el caso, pero al Grid, no a la tabla en la que tenia los datos, entonces hice algo como esto:
Tienes que trasladar el dataset a un viewstate asigar el viewstate al grid y después para hacer modificaciones a la estructura de datos, pasar el viewstate a un datatable algo asi:
dataset-->viewstate-->datatable--(modificaciones)-->viewstate-->grid
el dataset se olvida por completo...
cuando pasas el dataset a un viewstate, la estructura de datos queda igual que la del dataset por ejemplo:
Id-Nombre-Direccion
para agregar, ocupamos hacer un fila exactamente igual a esa para poderla agregar y para borrar solo tomamos la posicion de la fila, esta numeracion empieza con el numero 0
Id Nombre Direccion
0 123 Alex bla bla
1 124 Daniel bla bla
2 125 Raul bla bla
.
.
.
Para pasar el Dataset a un View:
ViewState("Nombre") = myDataset.Tables(0)
ViewState("Nombre") no ocupas declararla.
asignas ViewState("Nombre") al grid
ahora para agregarle datos al ViewState("Nombre") lo pasas priemro a un Datatble
myDataTable = ViewState("Nombre")
y agregas una nueva fila
myDataTable.Rows.Add(126, "Hector", "bla bla")
de esta manera estamos agregando una nueva fila a la estructura
después asignas el Datatable al ViewState("Nombre")
ViewState("Nombre") = myDataTable
y vuelves a cargar el grid con el ViewState("Nombre") para que tome los cambios
y de esta manera aparecera el grid con un nuevo registro
ahora para borrar un registro, pasa el ViewState("Nombre") a el Datatable y ahora solo buscar el item para borrarlo
antes tienes que poner esta linea:
myDataTable.AcceptChanges()
en el boton del grid para borrar tienes que sacar el Index de la fila, que en si, es el numero de fila, por ejeplo si quieres borrar Daniel el index sera 1
Id sera la variable donde estara el Index de la fila
Dim a As Integer = 0
For Each row As DataRow In myDataTable.Rows
If a = IdThen
row.Delete()
Exit For
End If
a += 1
Next
depues de borrar, vuelves a hacer todo elprocedimiento para volver a cargar el grid y se vean reflejados los cambios.
ahora para guardar en la DB, solo se guardara lo que hay en el Grid, vuelves a hacer un For Each para recorrer el Grid y vas guardando registro por registro.
Saludos.