- - PR -
DataGridViewComboBoxColumnへの空白選択肢設定
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-08-03 19:49
VB2005でWindows Applicationを作成しています。
DataGridViewのDataGridViewComboBoxColumnにて空白の選択肢を設定できず困っています。 問題のComboBox列を仮にDGVComboと呼びます。 DGVComboのItemには、以下のクラスインスタンスをListに集めて設定しています。 Class ListItem Property ValueMenber As Object Property DisplayMember As String ※細かい中身は省略します End Class DGVComboのフィールドが必須ではないため、空白の選択肢を含めて以下のように設定しています。 ValueMemverをNothing DisplayMemberを"" のListItemインスタンスを作成し、その後いくつかのListItemと共にList(of ListItem)に格納して DataSource=ListItems ValueMember="ValueMember" DisplayMember="DisplayMember" として選択肢を設定しました。 さらに、DataGridViewにバインドするDataTableを作成 Dim dtblTest As New DataTable With dtblTest .Columns.Add(New DataColumn("testID", GetType(Integer))) .Columns.Add(New DataColumn("name", GetType(String))) End With DataGridViewのDataSourceにdtblTestを指定し、testIDフィールドをDGVComboのDataPropertyNameにセットしました。 これを実行すると、testIDの値によって正しくDGVComboが選択されています。 ところが、この選択肢を空白の選択肢に切り替えて、隣のセルや他のコントロールに移動しようとすると以下のメッセージが表示され、前に選択されていた値に戻ってしまいます。 ------------------------------------------------ DataGridViewで次の例外が発生しました。 System.ArgumentException: 列'testID'をNullに設定できません。DBNullを使用してください。 場所 System.Data.DataRow.set_Item(DataColun column, Object value) この規定のダイアログを置き換えるには、DataErrorイベントをハンドルしてください。 ------------------------------------------------- 空白行用のListItemのValueMemberをDBNull.Valueにしても結果は変わりませんでした。 空白以外の値を選択することは可能です。 testIDの値がもともとNullの場合、表示時には空白行が選択されていますが、これを改めて空白行を選ぶと同様のエラーが発生します。 また、普通のComboBoxの場合は、この方法でうまくいきます。 どなたか解決法をご教示いただけないでしょうか。 よろしくお願いいたします。 | ||||
|
投稿日時: 2007-08-07 09:10
DataGridViewStyle.NullValue は規定で String.Empty ですから、
「ListItemのValueMember」 を String.Empty にしてはどうでしょうか? | ||||
|
投稿日時: 2007-08-07 16:26
ListItemのValueMemberをString.Emptyに設定してみましたが、結果はエラーになりました。 また、 Value = DBNull.Value Display = String.Empty に設定しても同じくエラーとなりました。 根本的な理由はわからないのですが、以下の設定で動作させることができましたのでご報告します。 Value = DBNull.Value Display = " " ←半角ブランク 対処療法的な感じは拭えませんが、とりあえず上記の方法で対処しようと思います。 アドバイスをいただき、ありがとうございました。 |
1