none
DataGridViewの行選択をロックする方法 or Etc RRS feed

  • 質問

  • 現在以下のURLにあるような画面でデータ入力画面を作成しています。
    http://www.atmarkit.co.jp/fdotnet/special/win20review02/win20review02_01.html

    DataGridViewでは行の追加・編集・削除を不可とし、
    別途「追加」ボタンで、DataBindingSource.AddNew()で行を追加して、
    詳細画面でデータの入力を行い、
    「登録」ボタンでDataSetに登録しようと考えています。

    ここで問題となっているのは、
    「登録」ボタンを押さずにDataGridViewの別の行をクリックして移動することでDataSetへの登録が行われ、
    入力データ不正の場合、DataErrorイベントが発生して追加した行が削除されてしまいます。

    上記の問題を解決させるためには
    「登録」ボタンをクリックするまでDataGridViewの新規行から選択を移動出来ないようにする方法が考えられますが、
    このようなことは出来るのでしょうか?
    もしくは、他行をクリックして選択を移動した場合新規行に選択を強制的に戻すような制御が必要なのでしょうか?

    2006年5月15日 14:24

回答

  • BindingSource は詳しくないんですが・・・

    ベタなやり方としては、DataGridViewのEnable制御が無難だと思います。

    追加ボタンで、Disable(Enable=False)して、登録ボタンで Enable=True にすれば
    追加した行が消える事はないと思います。(別のレコードに行かれる心配はない?)

    2006年5月15日 17:09
  • Puzzlerjpさんとほぼ同じですが、
    「追加」クリック … グリッドのenabled=false
    「登録」クリック … (必要ならエラーチェックしてから)DataSourceに行追加、行に値代入、グリッドのenabled=true
    ではどうでしょうか。
    グリッドに直接入力しなくていいのなら、追加の時でなく登録の時に行を増やした方が良いように思われます。

    2006年5月16日 0:38

すべての返信

  • BindingSource は詳しくないんですが・・・

    ベタなやり方としては、DataGridViewのEnable制御が無難だと思います。

    追加ボタンで、Disable(Enable=False)して、登録ボタンで Enable=True にすれば
    追加した行が消える事はないと思います。(別のレコードに行かれる心配はない?)

    2006年5月15日 17:09
  • Puzzlerjpさんとほぼ同じですが、
    「追加」クリック … グリッドのenabled=false
    「登録」クリック … (必要ならエラーチェックしてから)DataSourceに行追加、行に値代入、グリッドのenabled=true
    ではどうでしょうか。
    グリッドに直接入力しなくていいのなら、追加の時でなく登録の時に行を増やした方が良いように思われます。

    2006年5月16日 0:38
  • Puzzlerjpさん、mars12さんありがとうございます。

    行追加時にenabled=falseで期待していた動作が出来ました。
    コントロールのプロパティの値とその影響について理解しきれていないので、まだまだ勉強ですね。

    ちなみに、
    mars12さん>>グリッドに直接入力しなくていいのなら、追加の時でなく登録の時に行を増やした方が良いように思われます。

    BindingSource.AddNew()をせずに下段に初期入力する方法がわかりませんでした。
    とりあえず期待していた動作が出来たので、こちらについては時間が出来たときにやり方を調べてみます。

    2006年5月16日 13:04