下記の現象についてお教えください。
WinXP、VB2005です。
フォームにDataGridViewを貼り付け、Form1.Loadイベントに以下のコードを記述します。
Dim Cn As New OleDbConnection(...)
Dim SQLCm As OleDbCommand = Cn.CreateCommand
Dim Adapter As New OleDbDataAdapter(SQLCm)
Dim Table As New DataTable
SQLCm.CommandText = "SELECT * FROM XTable"
Adapter.Fill(Table)
DataGridView1.DataSource = Table
Adapter.Dispose()
SQLCm.Dispose()
Cn.Dispose()
実行し、DataGridView1の新規行に値を入力する場合ですが、
Table.Rows.Count = 0 の場合(つまり1行目が新規行)、Table.Rows.Count <> 0 と違って期待する実行結果が返ってきません。
具体的な動作は、
① 新規行に適当な値を入力
② その行から離れずに隣のセルに移動
③ [ESC]キーを押下
キャンセルされるイメージでしたが、行が増えます。
わかりにくい説明で恐縮ですが、Table.Rows.Count <> 0 の場合のような動作をさせたいのですが、
なぜそうなるのか、どう制御したらよいかアドバイスよろしくお願いします。
行が増えるってことは、AllowUserToAddRowsプロパティ=True
になっているってことですよね。
データが存在する場合でも、値が変わったと判断された場合は
行が増えると思いますけど。
[ESC]キーは入力をキャンセルしている訳ではないのでしょうか?
データが存在する場合は同様の手順で正常と判断できる結果を動作として返してきます。
新規行に入力を行うと、その下に更なる新規行が発生します。
[ESC]キーを押下すると発生した行は消え、新規行に対する入力はキャンセルされる、そう動作していると思うのですが…。
バグかも知れませんね、回避策
ESCキーで行の変更をキャンセルするDataGridView
http://www31.atwiki.jp/memo77/pages/25.html
DataGridView で NoNullAllowedException が発生する
http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=1006219&SiteID=7
やじゅさんありがとうござました。
> DataGridView で NoNullAllowedException が発生する
> http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=1006219&SiteID=7
まさにこのバグ処理で解決できました。
助かりました(^^)。