เมื่อผูกชุดข้อมูลเข้ากับตัวควบคุม Datagrid
และใช้วัตถุ DataAdapter เพื่อปรับเปลี่ยนฐานข้อมูล
เช่น:
dim adp เป็น OleDbDataAdapter ใหม่ (stradp, conn)
dim ocb เป็น OleDbCommandBuilder ใหม่ (adp)
adp.DeleteCommand = ocb.GetDeleteCommand()
adp.Update(ds, "คำสั่งซื้อ")
---------------------------------------------
เมื่อดำเนินการลบหากเราเพิ่ม วิธีการเช่นนี้:
ย่อย mydatagrid_delete (ผู้ส่งเป็นวัตถุ e เป็น datagridcommandeventargs)
dim dt เป็น DataTable ใหม่ ()
dt = ds.Tables("คำสั่งซื้อ")
dim dr เป็น DataRow
dr = dt.Rows (E.Item.ItemIndex)
ดร.ลบ
'dr.AcceptChanges 'ฉันเคยลองใช้การลบแบบสมบูรณ์และพบว่าเมื่อ adp อัปเดตกลับไปยังฐานข้อมูลโดยอัตโนมัติ คำสั่ง sql ที่เกี่ยวข้องไม่สามารถสร้างขึ้นได้โดยอัตโนมัติ
' เพื่อแก้ไขข้อยกเว้นดัชนีเพจที่เกิดขึ้นเมื่อลบรายการสุดท้ายของปัจจุบัน หน้าหนังสือ
'************************************************ * ***************
dim LastEditPage เป็นจำนวนเต็ม = mydatagrid.currentPageIndex
ถ้า (mydatagrid.pageCount - mydatagrid.currentPageIndex) = 1 และ mydatagrid.Items.Count = 1 จากนั้น
ถ้า mydatagrid.pageCount > 1 แล้ว
LastEditPage = LastEditPage - 1
อื่น
หน้าสุดท้ายแก้ไข = 0
สิ้นสุดถ้า
สิ้นสุดถ้า
mydatagrid.currentPageIndex = สุดท้ายแก้ไขเพจ
'************************************************ * **************
session("orderList") = ds
mydatagrid.edititemindex = -1
mydatagrid.datasource = ds.tables("คำสั่งซื้อ")
mydatagrid.databind()
end sub
มีข้อยกเว้นเกิดขึ้นเมื่อลบอันแรกทีละอัน พบว่าเมื่อลบอันที่สองจะไม่สามารถลบได้ นั่นคือ dr(2) ดั้งเดิมไม่กลายเป็น dr(1) โดยอัตโนมัติ หากเราใช้ dr.delete dr.acceptChanges การเปลี่ยนแปลงสามารถทำได้โดยอัตโนมัติ แต่ตามที่อธิบายไว้ข้างต้น การอัปเดตอัตโนมัติไม่สามารถใช้เพื่อกลับไปยังฐานข้อมูลได้ เราต้องได้รับดัชนีจริงเมื่อทำการลบ ดังนั้นเราจึงใช้วิธีนี้เพื่อสร้างตารางอื่นใน ds ปัจจุบันเพื่อรักษาการลบแบบซิงโครนัส แต่บันทึกค่าดัชนีจริงในคอลัมน์ id ของตาราง รหัสเฉพาะมีดังนี้:
วิธี เพื่อแก้ดัชนี dr:
dim orderTable as new DataTable() 'สร้างตารางชั่วคราวเพื่อบันทึกดัชนีและรักษาการลบข้อมูลให้ตรงกัน
หรี่ NewRow เป็น DataRow
dim dc เป็น DataColumn
orderTable.TableName = "รหัสคำสั่งซื้อ"
ds.Tables.add(ตารางการสั่งซื้อ)
dc = DataColumn ใหม่ ()
dc.ColumnName = "รหัส"
orderTable.columns.add(ดีซี)
หรี่ dcKey() เป็น DataColumn = {orderTable.Columns("id")}
orderTable.primaryKey = dcKey
หรี่ i เป็นจำนวนเต็ม
สำหรับ i = 0 ถึง (ds.Tables("Users").Rows.Count - 1)
theNewRow = orderTable.NewRow()
theNewRow("id") = i.toString()
orderTable.Rows.add(theNewRow)
ถัดไป
ที่เพิ่มในฟังก์ชันลบด้านบน แทนที่ dr = dt.Rows(e.Item.ItemIndex):
dim drOrder เป็น DataRow
drOrder = ds.Tables("orderId").แถว(E.Item.ItemIndex)
หรี่ currentOrder เป็นจำนวนเต็ม = CInt(drOrder("id")) + mydatagrid.currentPageIndex * mydatagrid.PageSize
dr = dt.แถว (currentOrder)
drOrder.ลบ
หากมีฟังก์ชันอัปเดต ให้แทนที่ dr = dt.Rows(e.Item.ItemIndex):
dim drOrder เป็น DataRow
drOrder = ds.Tables("orderId").แถว(E.Item.ItemIndex)
หรี่ currentOrder เป็นจำนวนเต็ม = CInt(drOrder("id")) + mydatagrid.currentPageIndex * mydatagrid.PageSize
dr = dt.แถว (currentOrder)