• ベストアンサー

オブジェクト参照がオブジェクト インスタンスに設定されていません  というエラーについて

タイトルの「オブジェクト参照がオブジェクト インスタンスに設定されていません」についてですが、 このエラーは、 null を参照しようとして例外が発生している エラーだと解釈しているのですが、nullでないのに、このエラーが出る場合はどのように対処すればいいのか教えてください。 下記のような文があるとします。 Dim aaa as String 'aaaは、データベースからデータをとってきています。 If aaa IsNot DBNull.Value Then DropDownList.SelectedItem.Text = aaa.TrimEnd 'ここでエラー End If aaaは、NullではないのでIf文の中に入っていくのですが、DropDownListにデータを入れようとすると、タイトルのようなエラーが発生します。 デバッグでaaaの値を見ても、ちゃんとデータが入っているし、Nullではないのですが、なぜこのようなエラーが出るのかわかりません。 このエラーは他に違う意味があるのでしょうか? また、他に影響している部分があるのでしょうか? どなたか教えてください。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.6

SelectedIndexは何番目の行かということを示すので、数値でなければ なりません。Items(i).Text=aaaになるiを見つけて設定します。 FindByTextかFindByValueで検索したListItemを使って、IndexOfで インデックスを求める方法がスマートでしょうか。 http://msdn.microsoft.com/ja-jp/library/system.web.ui.webcontrols.listitemcollection.findbytext(VS.80).aspx http://msdn.microsoft.com/ja-jp/library/system.web.ui.webcontrols.listitemcollection.findbyvalue(VS.80).aspx http://msdn.microsoft.com/ja-jp/library/system.web.ui.webcontrols.listitemcollection.indexof(VS.80).aspx >表示するデータと値のデータを別々に設定 Text(表示するデータ)とValue(値のデータ)を仕込んだListItemを Add(場合によってはInsert)メソッドで追加(挿入)します http://msdn.microsoft.com/ja-jp/library/system.web.ui.webcontrols.listitem(VS.80).aspx http://msdn.microsoft.com/ja-jp/library/system.web.ui.webcontrols.listitemcollection.add(VS.80).aspx http://msdn.microsoft.com/ja-jp/library/system.web.ui.webcontrols.listitemcollection.insert(VS.80).aspx

noname#223023
質問者

お礼

nda23さん ご丁寧に何度もありがとうございました! なんとかできそうです! またわからなくなったら投稿させて頂きます!! そのときはぜひよろしくお願い致します。 ありがとうございました♪

その他の回答 (5)

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.5

既に中身が仕込まれているDropDownListに対し、値を使って 該当する行を選択させる場合はSelectedValueじゃないですか? あるいはSelectedIndexでは? http://msdn.microsoft.com/ja-jp/library/system.web.ui.webcontrols.listcontrol.selectedvalue(VS.80).aspx http://msdn.microsoft.com/ja-jp/library/system.web.ui.webcontrols.listcontrol.selectedindex(VS.80).aspx

noname#223023
質問者

お礼

nda23さん ありがとうございます。 SelectedValueは通ったのですが、SelectedIndexにしますと、integerしかダメと言われて、止まってしまいました。 DropDownListは、表示するデータと値のデータを別々に設定しないといけないんですよね? 表示するデータと値のデータともテキスト型のデータを入れたいのですが、この場合はどうやってやればいいのでしょうか? よろしくお願いいたします。

noname#223023
質問者

補足

すみません、書き忘れました。 SelectedIndexもSelectedValueもリストで選択された項目の・・・とありますが、最初から選択された状態ではなく、カレンダーで選択した日付からデーターベースを検索し、その日付にあったデータをDropDownListに表示すると言うことをしたいのです。 また、同じDropDownListで、あらかじめデータベースと結合していて、データを埋め込んであり、カレンダーから日付を選択しなくても、データベースと結合したデータの選択もできるようにしたいです。

  • Pakkun10
  • ベストアンサー率44% (22/50)
回答No.4

No3です。 × drop1.Add("aaa"); ○ drop1.Items.Add("aaa"); です。すいません。 ちなみに、開発環境がVisualStudioであれば、 「SelectedItem」や「Item」のところでF1キーを押すとヘルプが見れます。 参照してみてください。

noname#223023
質問者

お礼

Pakkun10さん ありがとうございます。 DropDownListはあらかじめ、データベースと結びつけて、データを埋め込んでいます。 最初にページを表示したときに、カレンダーで日付を選択して、ボタンを押したら、その選択した日付に基づいて、データベースからの値をDropDownListで選択した状態にすると言うことをしたいのです。 提示しましたプログラムはその途中部分です。 ですので、DropDownListに追加という形ではなく、選択した状態にしたいのです。 何か他にお気づきでしたら教えてください。 よろしくお願いいたします。

  • Pakkun10
  • ベストアンサー率44% (22/50)
回答No.3

ドロップダウンリストにデータを追加するには (名前がdrop1になってるとすると) drop1.Add("aaa"); ではないでしょうか? SelectedItemは閲覧専用のプロパティですので、設定は出来ません。 それと、 DropDownList.SelectedItem.Text ・・・ と書いてありますが、「DropDownList」は画面に表示してる DropDownListを指してますか? 上の例のように、「drop1」という名前のDropDownListに追加することは出来ますが、 DropDownListそのものに追加することはできません。

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

例えば、型Aの変数X,Y,Zを考えましょう。これらの変数は型が 同じなので、メンバ変数やメソッドは共通です。しかし、独立した 変数なので、内部で保持している各種の値はそれぞれ別です。 こういった場合、変数それぞれの実体をインスタンスと言います。 変数を定義しただけでは実体がないので、画面のフィールドと結び 付けたり、新しい実体を生成して使います。これがインスタンス化 と呼ばれる操作です。 staticとは静的に固定されたもので、インスタンス化しなくても 最初からプログラム内に実在します。例えば、文字列定数などが それにあたります。その代わり、全体で1個しか実体がないので、 どのスレッドから参照しても同じ物を扱うため、勝手に変更すると 他のスレッドの動作がおかしくなったりします。 変数aaaは「データベースからデータをとってきています」なので、 その操作によりインスタンス化された(あるいは他のインスタンス からコピーされた)のですが、DropDownListの方はどうなっている いるのでしょう?こっちがエラーになっている気がします。 インスタンス依存のメソッドは勿論、インスタンス化されていないと 実行できないため、変数を操作する場合は自身のインスタンスに 関連付けられているので、掲題のような問題は起き難いのですが、 staticなメソッドはインスタンス化しなくても実行できるので、 (何でできるかは分かりますよね)インスタンス化されていない オブジェクトを参照する危険があります。

noname#223023
質問者

お礼

nda23さん ありがとうございます。 DropDownListはあらかじめ、データベースと結びつけて、データを埋め込んでいます。 最初にページを表示したときに、カレンダーで日付を選択して、ボタンを押したら、その選択した日付に基づいて、データベースからの値をDropDownListで選択した状態にすると言うことをしたいのです。 提示しましたプログラムはその途中部分です。 DropDownListの設定の仕方?が悪いのでしょうか? お気づきの点がありましたら教えてください。 よろしくお願いいたします。

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

staticなメソッドからstaticでないメソッドを呼び出したり、 staticでない変数を参照したりしているのでは? aaaは自動変数なので、インスタンスもstaticも関係ない変数ですが、 DropDownListの方はどうなっていますか?

noname#223023
質問者

お礼

nda23さん ありがとうございます。 すみません、プログラム初心者なもので、教えて頂いたことがよく理解できません。。。 もう少し詳細に教えていただけますと助かります。 お手数ですがよろしくお願い致します。

関連するQ&A