Wenn Sie das DataSet an das Datagrid-Steuerelement binden
und das DataAdapter-Objekt zum Ändern der Datenbank verwenden,
z. B.:
dim adp als neuen OleDbDataAdapter(stradp,conn)
dim ocb als neuen OleDbCommandBuilder(adp)
adp.DeleteCommand = ocb.GetDeleteCommand()
adp.Update(ds,"Bestellungen")
----------------------------------------
Wenn wir beim Ausführen des Löschvorgangs hinzufügen eine Methode wie diese:
sub mydatagrid_delete(sender als Objekt, e als datagridcommandeventargs)
dim dt als neue DataTable()
dt = ds.Tables("Bestellungen")
dim dr als DataRow
dr = dt.Rows(E.Item.ItemIndex)
dr.löschen
'dr.AcceptChanges 'Ich habe einmal versucht, die vollständige Löschung zu verwenden, und festgestellt, dass bei der automatischen Aktualisierung von adp in die Datenbank die entsprechende SQL-Anweisung nicht automatisch generiert werden konnte
', um die Seitenindexausnahme zu beheben, die beim Löschen des letzten Elements des aktuellen Elements aufgetreten ist Seite
'************************************************** * ***************
dim lastEditPage als integer = mydatagrid.currentPageIndex
Wenn (mydatagrid.pageCount - mydatagrid.currentPageIndex) = 1 und mydatagrid.Items.Count = 1 Dann
Wenn mydatagrid.pageCount > 1, dann
lastEditPage = LastEditPage - 1
Anders
lastEditPage = 0
Ende wenn
Ende wenn
mydatagrid.currentPageIndex = lastEditPage
'************************************************** * **************
session("orderList") = ds
mydatagrid.edititemindex = -1
mydatagrid.datasource = ds.tables("Bestellungen")
mydatagrid.databind()
end sub
Beim Löschen des ersten nach dem anderen ist eine Ausnahme aufgetreten. Es wurde festgestellt, dass beim Löschen des zweiten nicht gelöscht werden konnte, dh das ursprüngliche dr(2) wurde nicht automatisch zu dr(1). Wenn wir dr.delete dr.acceptChanges verwenden, können die Änderungen automatisch vorgenommen werden, aber wie oben erläutert, können automatische Updates nicht verwendet werden, um zur Datenbank zurückzukehren. Wir müssen beim Löschen den tatsächlichen Index erhalten, daher haben wir diese Methode verwendet, um eine weitere Tabelle im aktuellen DS zu erstellen, um das synchrone Löschen aufrechtzuerhalten, aber den tatsächlichen Indexwert in der ID-Spalte der Tabelle zu speichern. Der spezifische Code lautet wie folgt:
Ein Weg So lösen Sie den DR-Index:
dim orderTable as new DataTable() 'Erstellen Sie eine temporäre Tabelle, um den Index zu speichern und das synchronisierte Löschen aufrechtzuerhalten
dimmen Sie die NewRow als DataRow
dim dc als DataColumn
orderTable.TableName = "orderId"
ds.Tables.add(orderTable)
dc = new DataColumn()
dc.ColumnName = "id"
orderTable.columns.add(dc)
dimmen Sie dcKey() als DataColumn = {orderTable.Columns("id")}
orderTable.primaryKey = dcKey
dim i als Ganzzahl
Für i = 0 bis (ds.Tables("Users").Rows.Count - 1)
theNewRow = orderTable.NewRow()
theNewRow("id") = i.toString()
orderTable.Rows.add(theNewRow)
Der nächste
Code, der in der obigen Löschfunktion hinzugefügt wurde, ersetzt dr = dt.Rows(e.Item.ItemIndex):
dim drOrder as DataRow
drOrder = ds.Tables("orderId").Rows(E.Item.ItemIndex)
dim currentOrder as integer = CInt(drOrder("id")) + mydatagrid.currentPageIndex * mydatagrid.PageSize
dr = dt.Rows(currentOrder)
drOrder.delete
Wenn eine Aktualisierungsfunktion vorhanden ist, ersetzen Sie dr = dt.Rows(e.Item.ItemIndex):
dim drOrder as DataRow
drOrder = ds.Tables("orderId").Rows(E.Item.ItemIndex)
dim currentOrder as integer = CInt(drOrder("id")) + mydatagrid.currentPageIndex * mydatagrid.PageSize
dr = dt.Rows(currentOrder)