none
テーブルを他のデータセットにコピーし、それをバインド元のデータソースに使いたい RRS feed

  • 質問

  • いつもお世話になっております。


    先日、「あるデータセットのテーブルを他のデータセットにコピーし、それをバインド元のデータソースに使いたい」旨の質問をしました。
    http://social.msdn.microsoft.com/Forums/ja-JP/csharpgeneralja/thread/5977ddda-e35d-4de3-b8bf-5bf7e3648f52

    いったん解決出来たと思ったのですがこちらの勘違いで、残念ながら未だ解決出来ておりません。


    いったん登録出来たと勘違いした理由は、ある条件の時だけ
    データセットのUpdate()を使わず自前のインサート文で登録していたからでした。

    行いたいのは、元データを使ってデータセットにコピーし、
    バインド元のデータソースに使い新規追加することです。
    ※元データの更新ではないです。現状、更新になってしまいます。


    登録前のデータテーブルをデバッグしてみました。
    rowカウントは1です。1件のデータをまるまるコピーしたいのでこれはOK。
    rowのStateは、Modifiedになっていました。コピーしただけなのに何故??
    現状、ModifiedのためUpdate()すると当然元データが上書き更新されてしまいます。



    Fillして来たデータをまったく編集してないのになぜModified状態になるのでしょうか?

    ソースはこちらの回答のimportRowの方法です。
    http://social.msdn.microsoft.com/Forums/ja-JP/csharpgeneralja/thread/5977ddda-e35d-4de3-b8bf-5bf7e3648f52
    2011年6月20日 11:58

回答

  • こちらで試してみましたが、コピー先のDataRowのRowStateはUnChangedでした。コピー元のDataRowのRowSateもUnChangedであり、これはImportRowはインポート元のRowStateを引き継ぐ仕様と合致します。
    sumi_tanaさんのところではModifiedになるとのことですが、何か他のロジックが動いているということはないでしょうか? もしくは、以前にも書きましたが、コピー元のDataRowが既にModifiedということはないでしょうか?

    新規追加されたいのであれば、以下のようにすればAddedになりますが、根本的な原因がわからないと気持ち悪いですよね・・・

    dsコピー先.TEST.Rows[0].SetAdded();

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    • 回答としてマーク sumi_sumi 2011年6月21日 2:35
    2011年6月20日 12:37
    モデレータ

すべての返信

  • こちらで試してみましたが、コピー先のDataRowのRowStateはUnChangedでした。コピー元のDataRowのRowSateもUnChangedであり、これはImportRowはインポート元のRowStateを引き継ぐ仕様と合致します。
    sumi_tanaさんのところではModifiedになるとのことですが、何か他のロジックが動いているということはないでしょうか? もしくは、以前にも書きましたが、コピー元のDataRowが既にModifiedということはないでしょうか?

    新規追加されたいのであれば、以下のようにすればAddedになりますが、根本的な原因がわからないと気持ち悪いですよね・・・

    dsコピー先.TEST.Rows[0].SetAdded();

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    • 回答としてマーク sumi_sumi 2011年6月21日 2:35
    2011年6月20日 12:37
    モデレータ
  • trapemiya様

    毎度有難う御座居ます。

    本当にすみません!!

    仰る通りでした。

     

    顧客1件ごとにユニークになるようコードを画面から入力するようになっており、そのせいで「Modified」になっておりました・・・。

    お恥ずかしい限りです。。。

    ご指摘のとおり、コピー直後は「UnChanged」の状態でした。

     

    この状態で、新規追加したい場合はアドバイスされているようにSetAdded()で強制的?に状態を変更してあげるのが一般的な方法でしょうか?

    2011年6月21日 1:14
  • RowStateプロパティはReadOnlyであるため、ADO.NET1.1まではユーザーが簡単に変更することはできませんでした。そこで、ユーザーからの強い要望により、ADO.NET2.0でSetAddedやSetModifiedが追加されました。ですから、SetAddedを使用することは、一般的というよりはRowStateを変更できる唯一簡単な方法です。

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    2011年6月21日 1:58
    モデレータ
  • trapemiyaさま

     

    今回も最後まで有難う御座いました。

    教えていただきましたSetAdded()を利用し無事実現出来ました。

    何となくうろ覚えで、「行の状態は変更出来ない」と記憶していたようなきがしたのは、1.1までの本で読んだ記憶のようでした。

    やはり行の状態変更は、要望として多いと思います。

    記憶の点と点が繋がってきたような気がしました(笑)

     

    この度は本当に有難う御座いました。

    今回うっかりミスも多くてすみませんでした。

    2011年6月21日 2:34