Lors de la liaison du DataSet au contrôle Datagrid
et de l'utilisation de l'objet DataAdapter pour modifier la base de données,
par exemple :
dim adp en tant que nouveau OleDbDataAdapter (stradp, conn)
dim ocb en tant que nouveau OleDbCommandBuilder (adp)
adp.DeleteCommand = ocb.GetDeleteCommand()
adp.Update(ds,"Commandes")
-----------------------------------------
Lors de l'exécution de l'opération de suppression, si l'on ajoute une méthode comme celle-ci :
sub mydatagrid_delete (expéditeur en tant qu'objet, et en tant que datagridcommandeventargs)
dim dt comme new DataTable()
dt = ds.Tables("Commandes")
dim dr comme DataRow
dr = dt.Rows(E.Item.ItemIndex)
dr.supprimer
'dr.AcceptChanges 'J'ai essayé une fois d'utiliser la suppression complète et j'ai constaté que lorsque adp était automatiquement mis à jour dans la base de données, l'instruction SQL correspondante ne pouvait pas être automatiquement générée
' pour résoudre l'exception d'index de page survenue lors de la suppression du dernier élément de l'actuel. page
'************************************************ * **************
dim lastEditPage comme entier = mydatagrid.currentPageIndex
Si (mydatagrid.pageCount - mydatagrid.currentPageIndex) = 1 et mydatagrid.Items.Count = 1 Alors
Si mydatagrid.pageCount > 1 Alors
dernièreEditPage = DernièreEditPage - 1
Autre
dernièreEditPage = 0
Fin si
Fin si
mydatagrid.currentPageIndex = lastEditPage
'************************************************ * **************
session("listecommande") = ds
magriddedonnées.edititemindex = -1
mydatagrid.datasource = ds.tables("Commandes")
magriddedonnées.databind()
end sub
Une exception s'est produite lors de la suppression du premier un par un. Il a été constaté que lors de la suppression du second, il ne pouvait pas être supprimé, c'est-à-dire que le dr(2) d'origine n'est pas automatiquement devenu dr(1). Si nous utilisons dr.delete dr.acceptChanges, les modifications peuvent être apportées automatiquement, mais comme expliqué ci-dessus, les mises à jour automatiques ne peuvent pas être utilisées pour revenir à la base de données. Nous devons obtenir l'index réel lors de la suppression, nous avons donc utilisé cette méthode pour créer une autre table dans le ds actuel afin de maintenir la suppression synchrone, mais enregistrons la valeur réelle de l'index dans la colonne id de la table. Le code spécifique est le suivant :
Une méthode. pour résoudre l'index dr :
dim orderTable as new DataTable() 'Créer une table temporaire pour enregistrer l'index et maintenir la suppression synchronisée
atténuer theNewRow en tant que DataRow
dim dc comme DataColumn
orderTable.TableName = "orderId"
ds.Tables.add(orderTable)
dc = nouvelle colonne de données()
dc.ColumnName = "identifiant"
orderTable.columns.add(dc)
dim dcKey() as DataColumn = {orderTable.Columns("id")}
orderTable.primaryKey = dcKey
dim je comme entier
Pour i = 0 à (ds.Tables("Users").Rows.Count - 1)
theNewRow = orderTable.NewRow()
theNewRow("id") = i.toString()
orderTable.Rows.add(theNewRow)
suivant
ajouté dans la fonction de suppression ci-dessus, remplacez 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 (ordre actuel)
drOrder.delete
S'il existe une fonction de mise à jour, remplacez 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 (ordre actuel)