- - PR -
DataGridView_DefaultValuesNeededイベントについて
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2008-05-28 13:40
VB2008で開発開始して間もない者です。DataGridViewにDataTableをバインド
して入力更新削除処理をしており、行の初期値設定はDefaultValuesNeeded イベントを利用しております。 たまたまDataGridViewの表示行数が1件のみのケースがあり、その行を [Delelte]キーで削除し、新規の行のみになった状態でその行に入力しよう としたとき、初期値が設定されませんでした。 色々試した結果、既存の行を全て消した場合この現象になるようです。 次のようにMsgBoxでテストしましたが、「0」と表示されDefaultValuesNeeded イベントは正常に発生しているようですが、値の設定部分がうまく実行 されてないようです。 DefaultValuesNeededの機能はこういうものなのでしょうか?または使い方が 誤っているのでしょうか? ご教授お願い申し上げます。 Private Sub CSHNMPDataGridView_DefaultValuesNeeded(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewRowEventArgs) Handles CSHNMPDataGridView.DefaultValuesNeeded MsgBox(e.Row.Index) 'Test e.Row.Cells("CGLANG").Value = "I" End Sub |
|
投稿日時: 2008-05-29 21:45
DataTableをバインドというのは、もしかしてBindingSourceを介していますか?
そして、そのDataTableのDataColumnにDefaultValueは設定していますか? もしそうだとしたら、デリート→次の新規行へと移る間に、 DefaultValuesNeededイベントで設定した値がCurrentCellChangedイベントで設定される ↓ BindinSourceのCurrentChangedイベントが発生しそこで一度Nothingになる ↓ 同じくBindingSourceのCurrentItemChangedイベントを介した後再びCurrentChanged発生 ↓ そこで前述で設定したDefaultValueの値が入る という処理が行われています。 これは、通常(読み込み時点で既存データがある、もしくは0行の場合)は 「DefaultValuesNeededイベントで設定した値がCurrentCellChangedイベントで設定される 」 でとまります。(厳密にはDataGridView.SelectionChangedも走る) しかし、既存行がラスト1行 + 新規行で既存行を消してしまうと、 さらにBindingSource.CurrentChange及びBindingSource.CurrentItemChangedが走りNothingを経た後DataColumn.DefaultValueに設定されたデータが入ります。 従って、もしBindingSourceを使っているのであれば、元となっているDataTableの各DataColumnにDefaultValueを設定しておくことで解決するのではないでしょうか。 |
|
投稿日時: 2008-05-30 11:04
カドルドエグ様
ご回答ありがとうござます。 バインドはFillで取り込んだテーブルをDataGridView.DataSourceで設定しております。 DataTableの各DataColumnにDefaultValueを設定して実行したところ、問題は起こりま せんでした。この方法に切り替えることにしました。 適切なアドバイスありがとうございました。 |
1