عند ربط DataSet بعنصر تحكم Datagrid
واستخدام كائن DataAdapter لتعديل قاعدة البيانات،
مثل:
تعتيم adp كـ OleDbDataAdapter(stradp,conn) الجديد
خافت ocb كـ OleDbCommandBuilder(adp) الجديد
adp.DeleteCommand = ocb.GetDeleteCommand()
adp.Update(ds،"الطلبات")
-----------------------------------------
عند إجراء عملية الحذف إذا أضفنا طريقة مثل هذا:
mydatagrid_delete الفرعي (المرسل ككائن، e كـ datagridcommandeventargs)
خافت dt كـ DataTable () جديد
dt = ds.Tables("الطلبات")
خافت الدكتور مثل DataRow
الدكتور = dt.Rows(E.Item.ItemIndex)
حذف
"dr.AcceptChanges" لقد حاولت ذات مرة استخدام الحذف الكامل ووجدت أنه عند تحديث adp تلقائيًا مرة أخرى إلى قاعدة البيانات، لا يمكن إنشاء عبارة SQL المقابلة تلقائيًا
"لحل استثناء فهرس الصفحة الذي حدث عند حذف العنصر الأخير من الحالي" صفحة
'********************************************************************************************************************************************************************************* * ***************
خافت lastEditPage كعدد صحيح = mydatagrid.currentPageIndex
إذا (mydatagrid.pageCount - mydatagrid.currentPageIndex) = 1 وmydatagrid.Items.Count = 1 إذن
إذا mydatagrid.pageCount > 1 ثم
lastEditPage = LastEditPage - 1
آخر
صفحة التحرير الأخيرة = 0
نهاية إذا
نهاية إذا
mydatagrid.currentPageIndex = lastEditPage
'********************************************************************************************************************************************************************************* * **************
session("orderList") = ds
mydatagrid.edititemindex = -1
mydatagrid.datasource = ds.tables("الطلبات")
mydatagrid.databind ()
end sub
حدث استثناء عند حذف الأول واحدًا تلو الآخر، وتبين أنه عند حذف الثاني، لا يمكن حذفه، أي أن dr(2) الأصلي لم يصبح dr(1) تلقائيًا. إذا استخدمنا dr.delete dr.acceptChanges، فيمكن إجراء التغييرات تلقائيًا، ولكن كما هو موضح أعلاه، لا يمكن استخدام التحديثات التلقائية للعودة إلى قاعدة البيانات. يجب أن نحصل على الفهرس الفعلي عند الحذف، لذلك استخدمنا هذه الطريقة لإنشاء جدول آخر في ds الحالي للحفاظ على الحذف المتزامن، ولكن مع حفظ قيمة الفهرس الفعلية في عمود المعرف بالجدول، الكود المحدد هو كما يلي:
الطريقة لحل فهرس dr:
dim orderTable as new DataTable() 'إنشاء جدول مؤقت لحفظ الفهرس والحفاظ على الحذف المتزامن
قم بتعتيم TheNewRow كـ DataRow
خافت العاصمة كما DataColumn
orderTable.TableName = "معرف الطلب"
ds.Tables.add(orderTable)
العاصمة = عمود البيانات الجديد ()
dc.ColumnName = "المعرف"
orderTable.columns.add(dc)
خافت dcKey() كـ DataColumn = {orderTable.Columns("id")}
orderTable.primaryKey = dcKey
خافت ط كعدد صحيح
بالنسبة إلى 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 as DataRow
drOrder = ds.Tables("orderId").Rows(E.Item.ItemIndex)
خافت CurrentOrder كعدد صحيح = CInt(drOrder("id")) + mydatagrid.currentPageIndex * mydatagrid.PageSize
الدكتور = dt.Rows(الطلب الحالي)
drOrder.delete
إذا كانت هناك وظيفة تحديث، فاستبدل dr = dt.Rows(e.Item.ItemIndex):
dim drOrder كـ DataRow
drOrder = ds.Tables("orderId").Rows(E.Item.ItemIndex)
خافت CurrentOrder كعدد صحيح = CInt(drOrder("id")) + mydatagrid.currentPageIndex * mydatagrid.PageSize
الدكتور = dt.Rows(الطلب الحالي)