- PR -

DataTableについて教えてください。

1
投稿者投稿内容
zzz
会議室デビュー日: 2004/07/06
投稿数: 5
投稿日時: 2005-02-15 10:08
.netの初心者ですが、以下について教えていただきたいです。

 現在同じ構造のDataTableが二つあります。
 仮に、OldDTとNewDTとします。
 OldDTとNewDTを比較し、OldDTからNewDTへ新たな変化があったかどうかの
 判断処理について教えてください。

よろしくお願いいたします。
はぎ丸
常連さん
会議室デビュー日: 2005/02/02
投稿数: 36
投稿日時: 2005-02-15 11:19
引用:

 現在同じ構造のDataTableが二つあります。
 仮に、OldDTとNewDTとします。
 OldDTとNewDTを比較し、OldDTからNewDTへ新たな変化があったかどうかの
 判断処理について教えてください。



こんにちは。はぎ丸です。
AcceptChangesと、RowStateFilterを使用されては
いかがでしょう?
動作確認していませんが下記のようになると思います。
変更箇所のみDBに反映する場合などは下記のように
使用すると便利かも、です。

------------------------------------------
//DataTableの宣言
System.Data.DataTable OldDT = new DataTable();
System.Data.DataTable NewDT = new DataTable();

//OldDTにデータを格納
// ...

//NewDTにデータをコピー
NewDT = OldDT.Copy();

//NewDTのコミット(?)
NewDT.AcceptChanges();

//NewDTへの編集
// ...

//NewDTが編集された行だけを抜き出す。
NewDT.DefaultView.RowStateFilter =
System.Data.DataViewRowState.ModifiedCurrent;

zzz
会議室デビュー日: 2004/07/06
投稿数: 5
投稿日時: 2005-02-15 11:59
ありがとうございます。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-02-15 20:42
引用:

zzzさんの書き込み(2005-02-15 10:08)より:

 現在同じ構造のDataTableが二つあります。
 仮に、OldDTとNewDTとします。
 OldDTとNewDTを比較し、OldDTからNewDTへ新たな変化があったかどうかの
 判断処理について教えてください。


 ・・・何がどうで、どうしたいのか、さっぱりわからないのですが。。。

 同じ構造だからといって、同じデータであるとは限らないですよね?はぎ丸さんの例のように、OldDTをコピーしてNewDTを作るのなら、NewDTにコピーすること自体、不要です。DataRow.Item(DataColumn|String|Integer, DataRowVersion.Original)プロパティで、元の値が取り出せます。

 同じものを指すデータであることを識別するためのキーがあるなら、DataTable.Selectメソッドを使って、NewDTの各行について、OldDTに同じデータを示す行があるか調べます。ないなら新しいデータだし、あるならすべての列が同じ値かチェックして、違うものがあれば更新されています。


 まず、リアルな人に聞いてください。その人に解決できなくてもいいのです。その人が、あなたの質問を理解するためにどのような情報が必要か、それをあなたが知ってください。そして、その情報をすべて書き出してください。

 それと、あなたが目の前にある問題を解決する方法を知りたいのと同様、我々も問題が解決できたのか、どのようにして解決できたのか知りたいのです。「ありがとうございます」「参考にします」だけでなく、解決できたのか、どのように自分のケースに適用したのか、教えてください。

_________________
1

スキルアップ/キャリアアップ(JOB@IT)