- PR -

DataGridView_DefaultValuesNeededイベントについて

1
投稿者投稿内容
亀六
会議室デビュー日: 2008/05/28
投稿数: 2
投稿日時: 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
投稿数: 25
投稿日時: 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/28
投稿数: 2
投稿日時: 2008-05-30 11:04
カドルドエグ様

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

バインドはFillで取り込んだテーブルをDataGridView.DataSourceで設定しております。
DataTableの各DataColumnにDefaultValueを設定して実行したところ、問題は起こりま
せんでした。この方法に切り替えることにしました。
適切なアドバイスありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)