0

データベースクエリから返された(Assetタイプの)オブジェクトのリストをバインドしたDataGridViewオブジェクトがあります。

VisualStudio2005を使用してVBでプログラミングしています。

DataGridViewで選択した行からバインドされたオブジェクトの2つのコピー(oldAssetとnewAssetと呼びます)を取得し、フォーム上の他のコントロールからの入力に基づいてnewAssetを更新し、oldAssetとnewAssetの両方を関数に渡します。 DB内の適切なレコード。

私はこのように2つのコピーを取得しようとします:

Dim currentRow As DataGridViewRow = Me.AssetDataGridView.CurrentRow
Dim newAsset As Asset
newAsset = currentRow.DataBoundItem
Dim oldAsset As Asset
oldAsset = currentRow.DataBoundItem

oldAssetとnewAssetでウォッチウィンドウを開くと、この時点で適切な値が取得されていることが示されます。しかし、newAssetのプロパティを変更しようとすると、次のようになります。

newAsset.CurrentLocationID = cboLocations.SelectedValue

oldAssetの対応する値も変更されていることがわかります。これは私が望んでいることではありませんが、明らかに私がコンピューターに指示していることです。

コンピューターに自分のやりたいことをするように指示するにはどうすればよいですか?

前もって感謝します!

4

1 に答える 1

1

何が悪かったのかを見つけました。データバインディングはまったくありませんでした。

newAssetとoldAssetは浅いコピーでした。深いコピーが欲しかった。

ICloneableを実装し、メンバーごとのコピーを実行するClone()関数を作成し、次のように作成しました。

    Dim oldAsset As Asset
    oldAsset = currentRow.DataBoundItem
    Dim newAsset As Asset = oldAsset.Clone()
于 2009-05-19T20:29:52.273 に答える