DOBON.NET DOBON.NETプログラミング掲示板過去ログ

DataTableのRowState.Modify

環境/言語:[C#]
分類:[ASP.NET]

DataTable A
DataTable B(Aのワーク)

同じテーブル構成です。

AとBの差分ファイルを作成することになりました。
AとBを比べて
1.内容の一部に更新があったもの
2.削除されたもの
3.追加されたもの
をファイルに出力します。
内容に変更の無い物に関してはファイルへ出力しません。

RowStateを使用しようと思ったのですが
A→Bに1件1件データを更新していく際に
(削除ならdelete、追加ならadd、以外は値の代入)
データに変更がなくても、(全く同じ値を代入しても)
RowStateがModifiになってしまいます。

これはしょうがないのでしょうか?
データに変更がないデータにはたとえ値を代入しても
Modifyじゃなく、「変更無し」のRowStateが
帰ってくるように識別したいのですが無理なのでしょうか?
(列を一件一件見ていく他ないのでしょうか)
> (列を一件一件見ていく他ないのでしょうか)

と思いますが、さすがに毎回見るわけではなく、Bに適用したタイミングで
その行の確定(Datatable内での。)をしてRowStateを変更しておいてあげればいいです。
で実際、しないといけない処理なんて、
単に変更がないかどうかを各列ループで検証した上で、本当に変更がないのであれば、
行に対してAcceptChangesを実行すればよいだけです。

<AをBに適用するための行ループ>
    <●addedやらdeletedのCASE>
        ・・・
        何か処理
    <●「以外は値の代入」のターンのCASE>
        (ターンのAの行変化を適用済みのB上の行をtmprow_to_b as datarowでアクセスできるとして・・・)
        dim samechecker as boolean=true
        for each cl as datacolumn in table_b.columns
            if tmprow_to_b(cl.columnname,〜original)<>tmprow_to_b(cl.columnname,〜current) then
                samechecker=false
                exit for
            end if
        next
        '全項目同じだったら、Datatable内の変更を確定
        if samechecker=true then
            tmprow_to_b.acceptchanges
        end if

端折りました。
後は何とかしてください。
(非接続で実データベース非依存って、こういうとき楽ですよね。)
なるほど。
列をforeachでまわせばよかったんですね。
ありがとうございます。
参考になりました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板