- - PR -
InsertAtでコンボボックスが不正な動作をする
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-09-15 23:06
教えてください。
現在VB.NETで開発しておりますが、以下の現象で困っております。 コンボボックスに空の値を挿入する為に連結するデータセットにInsertAt を使用して無理やり空行を挿入してます. 詳細は以下のとおりです。 1.データセットデータ内容 /----------------------------------------------------------------------/ 0001,明治 0002,大正 0003,昭和 0004,平成 /----------------------------------------------------------------------/ 2.InsertAtコーディング内容 /----------------------------------------------------------------------/ If ds Is Nothing Then Return End If '読み込んだデータセットの一行目に空白を挿入する Dim row As DataRow = ds3.Tables(0).NewRow() row.Item(0) = "" row.Item(1) = "" ds.Tables(0).Rows.InsertAt(row, 0) Me.Combo.ValueMember = ds.Tables(0).Columns(0).ColumnName Me.Combo.DisplayMember = ds.Tables(0).Columns(1).ColumnName Me.Combo.DataSource = ds.Tables(0) /----------------------------------------------------------------------/ これでデータセットデータは以下の様になっているはずです. /----------------------------------------------------------------------/ "" ,"" 0001,明治 0002,大正 0003,昭和 0004,平成 /----------------------------------------------------------------------/ 3.コンボデータの選択 /----------------------------------------------------------------------/ Me.Combo.SelectedValue = "0001" /----------------------------------------------------------------------/ というコーディングをしているのですが、「3」の所でエラーが発生してしまいます。 「指定された引数は、有効な値の範囲内にありません。 パラメータ名:'-2147483648'は'index'に有効な値ではありません。」 とエラーが表示されます。 ちなみに"0002"〜"0004"は正常にセットされます。 試しにありえない"9999"や"0005"も試してみましたが、これは一番初めのレコード が選択される仕様なのか、正しく?空白レコードが選択されます。 ちなみにコード上からセットするのではなく、画面上でコンボを選択した場合は正しく "0001"が選択できます。 InsertAtの使用方法が悪いのでしょうか? 教えてください。 ※ちなみに今は代替策として、データセットを作るSQLでUNIONで無理やり空白レコード を先頭につけて対応してます。 この方法であると問題なく動きます。 | ||||
|
投稿日時: 2004-09-16 09:37
ds3のデータセットが不明ですが Dim row As DataRow = ds.Tables(0).NewRow() では? | ||||
|
投稿日時: 2004-09-16 12:00
確かに、InsertAt後だとComboBox.SelectedValueからSelectedIndexに 渡されるindexがおかしい(ComboBoxのIndexとしては)ようです。 上記の回避策が有効ですが、 DataTable.Copy() で複製したものをデータソースに指定してもOKでした。 | ||||
|
投稿日時: 2004-09-16 14:32
解決方法うんぬんではないですが... < OK > SelectedIndex = 1 SelectedText = "明治" < NG > SelectedValue = "0001" < Set方法不明 > SelectedItem = 'DataRowView!? となったので、 オブジェクトブラウザで確認すると SelectedIndex ・・・ListControlのSelectedIndexをOverride SelectedItem ・・・ComboBox Property SelectedText ・・・ComboBox Property SelectedValue ・・・ListControl から継承 SelectedValueのみListControl から継承されている。 ↑単にこれが気になっただけでした # 自己満足...(汗 | ||||
|
投稿日時: 2004-09-17 02:06
えんぞ@見習様
nanbu様 返信ありがとうございます。 この現象ってMSのバグだったりするのでしょうか? | ||||
|
投稿日時: 2004-09-17 22:45
バグかと疑う前に、できることはいろいろ試しましょう。
たとえば、空文字列ではなく、"0000"を入れてみるとか。AcceptChangesを発行して、RowStateを変更しておくとか。 | ||||
|
投稿日時: 2004-09-20 14:45
Jitta様
ありがとうございます。 そうですね。バグバグいうのはナンセンスですね。 ありがとうございました。 |
1