Saat mengikat DataSet ke kontrol Datagrid
dan menggunakan objek DataAdapter untuk mengubah database,
seperti:
redupkan iklan sebagai OleDbDataAdapter baru(stradp,sambungan)
redupkan ocb sebagai OleDbCommandBuilder baru (adp)
adp.DeleteCommand = ocb.GetDeleteCommand()
adp.Update(ds,"Pesanan")
-----------------------------------------
Saat melakukan operasi penghapusan, jika kita menambahkan metode seperti ini:
sub mydatagrid_delete(pengirim sebagai objek, e sebagai datagridcommandeventargs)
redupkan dt sebagai DataTable baru()
dt = ds.Tabel("Pesanan")
redupkan dr sebagai DataRow
dr = dt.Baris(E.Item.ItemIndex)
dr.hapus
'dr.AcceptChanges 'Saya pernah mencoba menggunakan penghapusan lengkap dan menemukan bahwa ketika adp secara otomatis diperbarui kembali ke database, pernyataan sql yang sesuai tidak dapat dibuat secara otomatis
' untuk mengatasi pengecualian indeks halaman yang terjadi saat menghapus item terakhir dari saat ini halaman
'******************************************************* ***************
redupkan lastEditPage sebagai integer = mydatagrid.currentPageIndex
Jika (mydatagrid.pageCount - mydatagrid.currentPageIndex) = 1 dan mydatagrid.Items.Count = 1 Maka
Jika mydatagrid.pageCount > 1 Lalu
halamanSunting terakhir = HalamanSunting Terakhir - 1
Kalau tidak
halaman Edit terakhir = 0
Akhiri Jika
Akhiri Jika
mydatagrid.currentPageIndex = lastEditPage
'******************************************************* **************
sesi("Daftar Pesanan") = ds
mydatagrid.edititemindex = -1
mydatagrid.datasource = ds.tables("Pesanan")
mydatagrid.databind()
end sub
Terjadi pengecualian saat menghapus yang pertama satu per satu. Ditemukan bahwa ketika menghapus yang kedua, tidak dapat dihapus, artinya dr(2) asli tidak otomatis menjadi dr(1). Jika kita menggunakan dr.delete dr.acceptChanges maka perubahan dapat dilakukan secara otomatis, namun seperti yang sudah dijelaskan diatas, update otomatis tidak dapat digunakan untuk kembali ke database. Kita harus mendapatkan indeks aktual saat menghapus, jadi kami menggunakan metode ini untuk membuat Tabel lain di ds saat ini untuk mempertahankan penghapusan sinkron, tetapi menyimpan nilai indeks aktual di kolom id Tabel. Kode spesifiknya adalah sebagai berikut:
Suatu cara untuk mengatasi indeks dr:
dim orderTable as new DataTable() 'Buat tabel sementara untuk menyimpan indeks dan mempertahankan penghapusan tersinkronisasi
meredupkan NewRow sebagai DataRow
redupkan dc sebagai DataColumn
orderTable.TableName = "orderId"
ds.Tabel.tambahkan(pesananTabel)
dc = Kolom Data baru()
dc.Nama Kolom = "id"
orderTable.columns.add(dc)
redupkan dcKey() sebagai DataColumn = {orderTable.Columns("id")}
orderTable.primaryKey = dcKey
redupkan saya sebagai bilangan bulat
Untuk i = 0 hingga (ds.Tables("Users").Rows.Count - 1)
theNewRow = orderTable.NewRow()
theNewRow("id") = i.toString()
orderTable.Rows.add(theNewRow)
selanjutnya
ditambahkan pada fungsi hapus di atas, ganti dr = dt.Rows(e.Item.ItemIndex):
dim drOrder sebagai DataRow
drOrder = ds.Tables("orderId").Baris(E.Item.ItemIndex)
redupkan currentOrder sebagai integer = CInt(drOrder("id")) + mydatagrid.currentPageIndex * mydatagrid.PageSize
dr = dt.Baris(Pesanan saat ini)
drOrder.hapus
Jika ada fungsi update, ganti dr = dt.Rows(e.Item.ItemIndex):
dim drOrder sebagai DataRow
drOrder = ds.Tables("orderId").Baris(E.Item.ItemIndex)
redupkan currentOrder sebagai integer = CInt(drOrder("id")) + mydatagrid.currentPageIndex * mydatagrid.PageSize
dr = dt.Baris(Pesanan saat ini)