none
リレーションを設定した場合のDataGridViewの行追加 RRS feed

  • 質問

  • お世話になります。

    以下を参考に一般的な「伝票/明細」型の登録画面を作成しました。
    http://www.atmarkit.co.jp/fdotnet/vblab/vsdbprog_index/index.html

    画面の上部に伝票入力部分、
    画面の下部に明細部分
    があるごく一般的なパターンです。


    このパターンにおいて、明細行の追加で悩んでおります。


    通常、「マスタ」型の登録画面など単一テーブルの登録画面であれば
    大体以下のようにバインドすると思います。
    this._bind.DataMember = "商品分類マスタ";
    this._bind.DataSource = this._dsSyohinBunrui;
    this.myDataGridView.DataSource = this._bind;
    this.myDataGridView.TableName = "商品分類マスタ";


    参考ページのように「伝票/明細」型の登録画面の場合、
    Relationを指定しますが、このように指定した場合に
    行の追加でうまくいきません。
    this._bindingSourceDenpyo.DataMember = "売上伝票";
    this._bindingSourceDenpyo.DataSource = this._dsUriage;
    this._bindingSourceMeisai.DataMember = "FK_売上伝票_売上明細";
    this._bindingSourceMeisai.DataSource = this._bindingSourceDenpyo;
    this.myDataGridView.DataSource = this._bindingSourceMeisai;
    this.myDataGridView.TableName= "売上明細";


    どのようにうまくいかないかと申しますと、
    「マスタ」型の場合、
    データテーブルのaddでDataGridViewもBindもDataTableも1行増えます。


    ところがRelationを指定した「伝票/明細」型の場合
    データテーブルのadd→_dsUriage.売上明細.Rows.Add(newRow);
    しただけではデータテーブルとBindSourceは、1行増えますが
    DataGridViewが1行増えません。

    逆にBindSouceのAddNew()を使いますと画面は1行増えますが
    データテーブルは1行増えていません。

    どうもDataGridViewだけバインドが意図した通りじゃないようです。

    データテーブルのaddでDataGridViewも行を追加したい場合に
    何が足りないのでしょうか?


    どうか宜しくお願い致します。

    2010年8月18日 6:07

回答

  • 試してみましたが、問題なさそうでした。
    もしかして、追加された行の外部キー項目の値が異なるために、表示対象外になっているだけとかないでしょうか?

    それと、DataGridView には TableName というプロパティはありませんので、提示されたコードは実際に動作確認されているものではなさそうに思います。
    実際のコードでは、全く別のソースにバインドされていたりしないでしょうか?
    • 回答としてマーク sumi_sumi 2010年8月19日 2:09
    2010年8月18日 9:55

すべての返信

  • 試してみましたが、問題なさそうでした。
    もしかして、追加された行の外部キー項目の値が異なるために、表示対象外になっているだけとかないでしょうか?

    それと、DataGridView には TableName というプロパティはありませんので、提示されたコードは実際に動作確認されているものではなさそうに思います。
    実際のコードでは、全く別のソースにバインドされていたりしないでしょうか?
    • 回答としてマーク sumi_sumi 2010年8月19日 2:09
    2010年8月18日 9:55
  • TH1さま

     

    回答ありがとうございます。

    すいません。おっしゃる通りです。

    こちらは、DataGridViewをカスタマイズしたクラスを使っておりました。

    それを忘れていましたが、TableNameプロパティが無いというご指摘で気づきました。

    今回の挙動もそのクラスの不具合ということのようですね。

    ご迷惑おかけしました。

    ご指摘有難う御座いました。

    2010年8月19日 2:12