コンボボックスで データバインドすると、初回例外が起きてしまう
投稿者 刈谷勇  (社会人)
投稿日時
2009/10/15 01:20:11
こんにちは、ピアさん。
回答ではないのですが、以下の点を教えてください。
・VBのバージョン
・現象が再現するコード
今ある情報からの推測という形ですが、
System.ArgumentOutOfRangeExceptionは配列等の範囲外を参照しようとしたときに出ますので、Accessから想定している件数がちゃんと取得できているか、配列を参照する場所は正しいかを確認してみてください。
回答ではないのですが、以下の点を教えてください。
・VBのバージョン
・現象が再現するコード
今ある情報からの推測という形ですが、
System.ArgumentOutOfRangeExceptionは配列等の範囲外を参照しようとしたときに出ますので、Accessから想定している件数がちゃんと取得できているか、配列を参照する場所は正しいかを確認してみてください。
投稿者 ピア  (社会人)
投稿日時
2009/10/15 02:23:49
返信ありがとうございます。
バージョン >> VB2008
実際、コンボボックスコントロールの特別なコードは書いてなく、フォーム内のコンボボックスから直接データバインドを設定している状態です。
==== コンボボックスのデータバインド状況 ====
データソース:CustomerBindingSource
メンバの表示:顧客名
値メンバ :ID
選択された値:なし
です
Private Sub CustomerForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
CustomerComboBox.DropDownStyle = ComboBoxStyle.DropDownList
Me.CustomerTableAdapter.Fill(Me.データセット名.Customer) ←←ここで初回例外
End Sub
例外が起こっても、データ件数は問題なくボックス内に配置されており、機能も問題なく使えています。
バージョン >> VB2008
実際、コンボボックスコントロールの特別なコードは書いてなく、フォーム内のコンボボックスから直接データバインドを設定している状態です。
==== コンボボックスのデータバインド状況 ====
データソース:CustomerBindingSource
メンバの表示:顧客名
値メンバ :ID
選択された値:なし
です
Private Sub CustomerForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
CustomerComboBox.DropDownStyle = ComboBoxStyle.DropDownList
Me.CustomerTableAdapter.Fill(Me.データセット名.Customer) ←←ここで初回例外
End Sub
例外が起こっても、データ件数は問題なくボックス内に配置されており、機能も問題なく使えています。
投稿者 刈谷勇  (社会人)
投稿日時
2009/10/15 03:14:30
ピアさん、すみません間違った回答をしていました。
>System.ArgumentOutOfRangeExceptionは配列等の範囲外を参照しようとしたときに出ますので、
>Accessから想定している件数がちゃんと取得できているか、配列を参照する場所は正しいかを確認して>みてください。
配列の参照外は、IndexOutOfRangeExceptionでした。
ヘルプより、
ArgumentOutOfRangeException は、メソッドの呼び出し時に渡された引数の少なくとも 1 つが nullNothingnullptrnull オブジェクト参照 (Visual Basic では Nothing) でなく、有効な値も含まれていない場合にスローされます。
でした。
>System.ArgumentOutOfRangeExceptionは配列等の範囲外を参照しようとしたときに出ますので、
>Accessから想定している件数がちゃんと取得できているか、配列を参照する場所は正しいかを確認して>みてください。
配列の参照外は、IndexOutOfRangeExceptionでした。
ヘルプより、
ArgumentOutOfRangeException は、メソッドの呼び出し時に渡された引数の少なくとも 1 つが nullNothingnullptrnull オブジェクト参照 (Visual Basic では Nothing) でなく、有効な値も含まれていない場合にスローされます。
でした。
投稿者 刈谷勇  (社会人)
投稿日時
2009/10/15 18:30:06
ピアさん、先日は間違った情報を流してしまい申し訳ありませんでした。
提示されたコードは、問題ないと思います。
(多分、VBで自動で作成されたコードですよね)
以下の2点を確認していただければと思います。
1)新規のプロジェクトでフォームにコンボボックスのみを作成して、バインディングしてみる
2)別のテーブルをバインディングしてみる
1でエラーがでない場合は、現在のコード側に問題があると思います。
2でエラーがでない場合は、データを確認してみると何かわかるかもしれません。
両方ともだめな場合は、環境や取得方法に問題があるのかもしれません。
提示されたコードは、問題ないと思います。
(多分、VBで自動で作成されたコードですよね)
以下の2点を確認していただければと思います。
1)新規のプロジェクトでフォームにコンボボックスのみを作成して、バインディングしてみる
2)別のテーブルをバインディングしてみる
1でエラーがでない場合は、現在のコード側に問題があると思います。
2でエラーがでない場合は、データを確認してみると何かわかるかもしれません。
両方ともだめな場合は、環境や取得方法に問題があるのかもしれません。
現在顧客管理系のプログラムを作成中なのです。その際、コンボボックスでの表示は顧客の名前で,
Selected.Valueでは顧客IDを必要とするので、Access2000のデータテーブルを使用し、コンボボックスでデータバインドさせています。
しかしそのコンボボックスがあるフォームのロード中にTableAdapterの使用のせいで、System.ArgumentOutOfRangeException' の初回例外が起きてしまいます。
コンボボックスにTableAdapterを使用せず、データバインドできる方法はあるのでしょうか?又、System.ArgumentOutOfRangeExceptionの例外を修正する方法はあるのでしょうか?
そして、この例外がもたらすソフト完成後の影響はどんなことなのでしょうか?