閱讀703 返回首頁    go 汽車大全


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

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

dimdrOrderasDataRow
drOrder=ds.Tables("orderId").Rows(E.Item.ItemIndex)
dimcurrentOrderasinteger=CInt(drOrder("id"))+mydatagrid.currentPageIndex*mydatagrid.PageSize
dr=dt.Rows(currentOrder)

最後更新:2017-04-02 00:06:36

  上一篇:go ASP.NET設計網絡硬盤之文件夾實現
  下一篇:go 你不知道但很有用的60個生活知識