当把dataset绑定到datagrid控件,
并利用dataadapter对象修改数据库
如:
dimadpasnewoledbdataadapter(stradp,conn)
dimocbasnewoledbcommandbuilder(adp)
adp.deletecommand=ocb.getdeletecommand()
adp.update(ds,"orders")
--------------------------------
执行删除操作时,如我们加入这样一个方法:
submydatagrid_delete(senderasobject,easdatagridcommandeventargs)
dimdtasnewdatatable()
dt=ds.tables("orders")
dimdrasdatarow
dr=dt.rows(e.item.itemindex)
dr.delete
'dr.acceptchanges'曾经尝试使用彻底删除,发现adp自动更新回数据库时,无法自动生成相应的sql语句
'解决删除当前页最后一项时出现的页索引异常
'*****************************************************************
dimlasteditpageasinteger=mydatagrid.currentpageindex
if(mydatagrid.pagecount-mydatagrid.currentpageindex)=1andmydatagrid.items.count=1then
ifmydatagrid.pagecount>1then
lasteditpage=lasteditpage-1
else
lasteditpage=0
endif
mydatagrid.currentpageindex=lasteditpage
'****************************************************************
session("orderlist")=ds
mydatagrid.edititemindex=-1
mydatagrid.datasource=ds.tables("orders")
mydatagrid.databind()
endsub
当由第一个开始逐个删除时出现了异常,发现在删除第二时,删不掉,即原来的dr(2)没有自动变为dr(1)。如果我们使用dr.deletedr.acceptchanges则可以自动变化,但是上面说明了,则无法使用自动更新回到数据库。我们必须获得删除时的实际索引,所以就用了一个本方法,在当前的ds中另外建了一个table,保持同步删除,但是在table的id列中,保存实际的索引值,具体代码如下:
解决dr索引的一个办法:
dimordertableasnewdatatable()'建一个临时表用来保存索引,保持同步删除
dimthenewrowasdatarow
dimdcasdatacolumn
ordertable.tablename="orderid"
ds.tables.add(ordertable)
dc=newdatacolumn()
dc.columnname="id"
ordertable.columns.add(dc)
dimdckey()asdatacolumn={ordertable.columns("id")}
ordertable.primarykey=dckey
dimiasinteger
fori=0to(ds.tables("users").rows.count-1)
thenewrow=ordertable.newrow()
thenewrow("id")=i.tostring()
ordertable.rows.add(thenewrow)
next
上述删除功能中加的代码,替换dr=dt.rows(e.item.itemindex):
dimdrorderasdatarow
drorder=ds.tables("orderid").rows(e.item.itemindex)
dimcurrentorderasinteger=cint(drorder("id"))+mydatagrid.currentpageindex*mydatagrid.pagesize
dr=dt.rows(currentorder)
drorder.delete
如果有更新功能,则替换dr=dt.rows(e.item.itemindex):