天天看點

datagrid與DataSet結合使用中出現的索引問題

當把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):