- - PR -
DataGridViewでComboBox列の値の確定のタイミング
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-11-26 12:27
いつも、こちらの会議室にはお世話になっています。
現在、Visual Basic 2005 で、Windowsアプリケーションの開発を行っており、 フォームにDataGridViewコントロールを置いて、明細入力のプログラムを作成しております。 入力は、コンボボックスのみで行っており、DataGridViewComboBoxColumn列を使用しています。 コンボボックスの表示内容は、{空白, "昇順", "降順"}で、各表示内容はデータベースのテーブルに持たせている、[SORT]列の{0,1,2}に対応させたいと思っています。 以下のようなコードで、DataGridViewの各列にデータバインドを行っています。 With Me.dgvSelectedItems .Columns.Add(Me.txtColSelectedRowNo) ' 行番号表示用 .Columns.Add(Me.txtColSort) ' 値の反映を見たいのでテスト用に追加しただけ .Columns.Add(Me.cmbColSort) ' コンボボックス .DataSource = Me.dtSelectedItems End With Me.txtColSelectedRowNo.DataPropertyName = "COLUMN_NO" Me.txtColSort.DataPropertyName = "SORT" ' 並順コンボボックス用のデータソースを作成 Dim sortTable As New DataTable("SortTable") sortTable.Columns.Add("Sort", GetType(Short)) sortTable.Columns.Add("SortName", GetType(String)) sortTable.Rows.Add(0, Space(1)) sortTable.Rows.Add(1, "昇順") sortTable.Rows.Add(2, "降順") ' cmbColSort Me.cmbColSort.DataPropertyName = "SORT" Me.cmbColSort.DataSource = sortTable Me.cmbColSort.ValueMember = "Sort" Me.cmbColSort.DisplayMember = "SortName" この、コンボボックス列で、あるセルの値を選択して変更し、そのセルを選択状態にしたままのDataSourceのDataTableのUpdateメソッドを呼び出すと、そのセルのレコードは、変更が反映されません。 別のセルを選択すると、変更は確定されるのですが、コンボボックスの表示内容を変更した時点で、DataTableに変更が反映するようにできないでしょうか。 DataGridViewのCurrentCellDirtyStateChangedイベントに以下のように記述すると、 ブレークポイントを置いて、デバッグモードでステップ実行を行うと、変更が反映されるのですが、通常に実行すると、変更は反映されませんでした。 With Me.dgvSelectedItems Select Case .CurrentCellAddress.X Case Me.cmbColSort.Index 'コミットする If .IsCurrentCellDirty Then .CommitEdit(DataGridViewDataErrorContexts.Commit) End Select end With どなたか、解決方法をご存知の方がいらっしゃいましたら、よろしくお願いいたします。 [ メッセージ編集済み 編集者: むーみん 編集日時 2007-11-26 13:53 ] | ||||||||
|
投稿日時: 2007-11-26 13:07
この処理を行う直前に、DatagridView.EndEdit()呼んだらどうなります? | ||||||||
|
投稿日時: 2007-11-26 13:39
かずくんさん、どうもありがとうございます。 DataTableのUpdateメソッドの前に、DataGridViewのEndEditメソッドを呼び出す行を追加して実行しました。 その結果、現象は変わりませんでした。 更新時の現象を先ほどは書かなかったので、以下に追記いたします。 Updateメソッドが呼び出され、データベースが更新された後に、 DataGridViewのtxtColSort列(コンボボックスのDataPropertyと同じDataPropertyを持ちます/テストのための列です。)に表示される値は、変更後の値に変わります。 しかし、実際にデータベースのレコードを見ると、変更は反映されていません。 自分でも調べてみます。 どうもありがとうございます。 | ||||||||
|
投稿日時: 2007-11-26 18:29
解決しました。
結論をいうと、DataTableのUpdateメソッドを呼び出すのを、 更新Buttonをフォーム上に置いて、それをClickしたタイミングで行っていたのですが、 そのButtonのCausesValidationプロパティをFalseにしてしまっていたため、 DataTableにDataGridViewの内容が反映されていなかったようでした。 このプロパティをTrueに変更したら、変更がデータベースに反映されました。 とっても初歩的な部分を見落としてしまっていまして、 私の投稿で考えて下さった方、申し訳ありませんでした。 どうもありがとうございました。 |
1