コンボボックスのItemsコレクションをArray.IndexOfで検索するには?

解決


モモ  2009-01-27 19:16:28  No: 145701

VB.NET2005です。
コンボボックスのItemsコレクションを検索する場合、
いつも以下のようなコードで対応しています。
----------------------------------------
例)列インデックス=1に"あいうえお"が存在するか?
Dim intRowNo As Integer = 0
Dim bolOk As Boolean = False
For intRowNo = 1 To Me.ComboBox1.Items.Count - 1
  If Me.ComboBox1.Items(intRowNo)(1) = "あいうえお" Then
    bolOk = True
    Exit For
  End If
Next
If bolOk = True Then
  ・・・
End If
----------------------------------------
一次元配列の場合ならArray.IndexOfで-1が返ってくるかどうかで
判定していますが、上記チェックをArray.IndexOfで出来ませんか?
列インデックス=1の配列(一次元)として検索すればよいのでしょうが、
記述方法が分かりません。
Array.IndexOf(???, "あいうえお")の????が分かりません。
Array.IndexOfでなくとも簡単にチェックできる方法があれば教えて下さい。
何卒よろしくお願い致します。


YuO  2009-01-27 19:50:48  No: 145702

ComboBox.ItemsはComboBox.ObjectCollectionクラスですから,配列ではありません。
また,ComboBox.ObjectCollectionにIndexOfは存在しないため,
インデックスが必要なのであれば自分で作る必要があります。

ただし,「存在するかどうか」であれば,ComboBox.ObjectCollectionにはContainsがあるので,これを利用できます。


モモ  2009-01-27 20:22:11  No: 145703

お返事ありがとうございました。
ComboBox.ObjectCollectionのContainsはコレクション内に検索文字列が
存在するかどうかですが、現在Me.ComboBox1にはDataTable(ID、name)を
直接バインドしており、複数列のコレクションになっています。
ある列(Name列)の中に検索文字列が存在するかを調べるにはどうすれば
よいですか?
何卒よろしくお願い致します。


Hongliang  2009-01-27 20:22:29  No: 145704

ComboBox には FindString / FindStringExact メソッドも存在してますね。


モモ  2009-01-28 18:15:18  No: 145705

お返事ありがとうございます。
FindStringとFindStringExact、恥ずかしながらこちらも初めて知りました。
私なりにMSDNで調べましたが、複数列ある中の”name列”の中で
”あいうえお”を検索という記述方法が分かりませんでした。
「ComboBox1.FindStringExact("あいうえお")」とすると、
IDも検索対象に入るのではと思いますが、列を特定する方法があれば
教えて頂けますでしょうか。
何度も申し訳ございませんが、何卒よろしくお願い致します。


Hongliang  2009-01-28 19:08:55  No: 145706

FindString/FindStringExact で検索する対象は、GetItemText で取得できる文字列です。つまり DataTable がデータソースなら DisplayMember で指定している列ですね。それ以外の列に対しては使用できません。
DataSource を使っているのなら、そのソースとなるデータクラス自体に検索機能が用意されている場合が多いです。DataTable なら Select メソッド等があります。


魔界の仮面弁士  2009-01-28 19:15:25  No: 145707

> IDも検索対象に入るのではと思いますが
FindStringExact の対象となるのは、ComboBox に表示される文字列です。
DataTable を割り当てているなら、ComboBox.DisplayMember で指定した列を
探すことになるので、ID は検索対象にはならないかと。

ID を使って検索したいという意味であれば、ComboBox からではなく、
DataTable を .Rows.Find して対象行を探してみては如何でしょう。
主キー以外も検索対象にするなら、DataView とか。

# (2005ではなく) 2008 なら、また別のやり方もありそうですけれども。


モモ  2009-01-29 18:31:46  No: 145708

いつもご回答ありがとうございます。
FindStringExactで実現できました。
勉強不足で申し訳ございません。
本当にありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加