Al vincular el DataSet al control Datagrid
y utilizar el objeto DataAdapter para modificar la base de datos,
como por ejemplo:
atenuar adp como nuevo OleDbDataAdapter(stradp,conn)
atenuar ocb como nuevo OleDbCommandBuilder(adp)
adp.DeleteCommand = ocb.GetDeleteCommand()
adp.Update(ds,"Pedidos")
-----------------------------------------
Al realizar la operación de eliminación, si agregamos un método como este:
sub mydatagrid_delete (remitente como objeto, e como datagridcommandeventargs)
atenuar dt como nueva tabla de datos()
dt = ds.Tables("Pedidos")
dr. tenue como DataRow
dr = dt.Rows(E.Item.ItemIndex)
dr.eliminar
'dr.AcceptChanges 'Una vez intenté utilizar la eliminación completa y descubrí que cuando adp se actualizaba automáticamente a la base de datos, la instrucción SQL correspondiente no se podía generar automáticamente
' para resolver la excepción de índice de página que se producía al eliminar el último elemento de la página actual. página
'************************************************ * ***************
tenue lastEditPage como entero = mydatagrid.currentPageIndex
Si (mydatagrid.pageCount - mydatagrid.currentPageIndex) = 1 y mydatagrid.Items.Count = 1 Entonces
Si mydatagrid.pageCount > 1 Entonces
última páginaEditar = Última páginaEditar - 1
Demás
última página de edición = 0
Terminar si
Terminar si
mydatagrid.currentPageIndex = última página de edición
'************************************************ * **************
sesión ("lista de pedidos") = ds
mydatagrid.edititemindex = -1
mydatagrid.datasource = ds.tables("Pedidos")
mydatagrid.databind()
end sub
Se produjo una excepción al eliminar el primero uno por uno. Se encontró que al eliminar el segundo, no se pudo eliminar, es decir, el dr (2) original no se convirtió automáticamente en dr (1). Si usamos dr.delete dr.acceptChanges, los cambios se pueden realizar automáticamente, pero como se explicó anteriormente, las actualizaciones automáticas no se pueden utilizar para volver a la base de datos. Debemos obtener el índice real al eliminar, por lo que usamos este método para crear otra tabla en el ds actual para mantener la eliminación sincrónica, pero guardamos el valor del índice real en la columna de identificación de la tabla. El código específico es el siguiente:
Una forma. para resolver el índice dr:
dim orderTable as new DataTable() 'Crea una tabla temporal para guardar el índice y mantener la eliminación sincronizada
atenuar theNewRow como DataRow
CC tenue como columna de datos
orderTable.TableName = "orderId"
ds.Tables.add(ordenTabla)
dc = nueva columna de datos()
dc.ColumnName = "id"
ordenTable.columnas.add(dc)
dim dcKey() como DataColumn = {orderTable.Columns("id")}
orderTable.primaryKey = dcKey
atenuar i como número entero
Para i = 0 a (ds.Tables("Users").Rows.Count - 1)
theNewRow = ordenTable.NewRow()
theNewRow("id") = i.toString()
orderTable.Rows.add(laNuevaFila)
El siguiente
código agregado en la función de eliminación anterior, reemplaza dr = dt.Rows(e.Item.ItemIndex):
dim drOrder as DataRow
drOrder = ds.Tables("orderId").Rows(E.Item.ItemIndex)
dim currentOrder como entero = CInt(drOrder("id")) + mydatagrid.currentPageIndex * mydatagrid.PageSize
dr = dt.Rows(orden actual)
drOrder.eliminar
Si hay una función de actualización, reemplace dr = dt.Rows(e.Item.ItemIndex):
dim drOrder as DataRow
drOrder = ds.Tables("orderId").Rows(E.Item.ItemIndex)
dim currentOrder como entero = CInt(drOrder("id")) + mydatagrid.currentPageIndex * mydatagrid.PageSize
dr = dt.Rows(orden actual)