DataSet を Datagrid コントロールにバインドし
、DataAdapter オブジェクトを使用してデータベースを変更する場合は、
次のようになります。
dim adp as new OleDbDataAdapter(stradp,conn)
新しい OleDbCommandBuilder(adp) として dim ocb
adp.DeleteCommand = ocb.GetDeleteCommand()
adp.Update(ds,"注文")
---------------------------------------
削除操作を行う際に、このような方法:
sub mydatagrid_delete(オブジェクトとして送信者、datagridcommandeventargs として)
dim dt as new DataTable()
dt = ds.Tables("注文")
DataRow としての dim dr
dr = dt.Rows(E.Item.ItemIndex)
dr.削除
'dr.AcceptChanges '一度完全削除を使用しようとしましたが、adp がデータベースに自動的に更新されると、対応する SQL ステートメントが自動的に生成されないことがわかりました
。 ' 現在のページの最後の項目を削除するときに発生するページ インデックス例外を解決するためにページ
'************************************************ * ***************
dim lastEditPage as integer = 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()
最初
のものを 1 つずつ削除するときに例外が発生しました。2 番目のものを削除すると、削除できないことがわかりました。つまり、元の dr(2) が自動的に dr(1) にならないことがわかりました。 dr.delete dr.acceptChanges を使用すると、変更を自動的に行うことができますが、上で説明したように、自動更新を使用してデータベースに戻すことはできません。削除時に実際のインデックスを取得する必要があるため、同期削除を維持するためにこのメソッドを使用して現在の DS に別のテーブルを作成しましたが、実際のインデックス値はテーブルの id 列に保存されました。具体的なコードは次のとおりです
。 dr インデックスを解決するには:
dim orderTable as new DataTable() 'インデックスを保存し、同期削除を維持するための一時テーブルを作成します。
NewRow を DataRow として淡色表示します
DataColumn としての dim dc
orderTable.TableName = "orderId"
ds.Tables.add(orderTable)
dc = 新しい DataColumn()
dc.ColumnName = "id"
orderTable.columns.add(dc)
dim dcKey() as 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 を DataRow として
置き換えます。
drOrder = ds.Tables("orderId").Rows(E.Item.ItemIndex)
dim currentOrder as integer = CInt(drOrder("id")) + mydatagrid.currentPageIndex * mydatagrid.PageSize
dr = dt.Rows(currentOrder)
drOrder.delete
更新関数がある場合は、 dr = dt.Rows(e.Item.ItemIndex):
dim drOrder を DataRow に
置き換えます。
drOrder = ds.Tables("orderId").Rows(E.Item.ItemIndex)
dim currentOrder as integer = CInt(drOrder("id")) + mydatagrid.currentPageIndex * mydatagrid.PageSize
dr = dt.Rows(currentOrder)