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でなくとも簡単にチェックできる方法があれば教えて下さい。
何卒よろしくお願い致します。
ComboBox.ItemsはComboBox.ObjectCollectionクラスですから,配列ではありません。
また,ComboBox.ObjectCollectionにIndexOfは存在しないため,
インデックスが必要なのであれば自分で作る必要があります。
ただし,「存在するかどうか」であれば,ComboBox.ObjectCollectionにはContainsがあるので,これを利用できます。
お返事ありがとうございました。
ComboBox.ObjectCollectionのContainsはコレクション内に検索文字列が
存在するかどうかですが、現在Me.ComboBox1にはDataTable(ID、name)を
直接バインドしており、複数列のコレクションになっています。
ある列(Name列)の中に検索文字列が存在するかを調べるにはどうすれば
よいですか?
何卒よろしくお願い致します。
ComboBox には FindString / FindStringExact メソッドも存在してますね。
お返事ありがとうございます。
FindStringとFindStringExact、恥ずかしながらこちらも初めて知りました。
私なりにMSDNで調べましたが、複数列ある中の”name列”の中で
”あいうえお”を検索という記述方法が分かりませんでした。
「ComboBox1.FindStringExact("あいうえお")」とすると、
IDも検索対象に入るのではと思いますが、列を特定する方法があれば
教えて頂けますでしょうか。
何度も申し訳ございませんが、何卒よろしくお願い致します。
FindString/FindStringExact で検索する対象は、GetItemText で取得できる文字列です。つまり DataTable がデータソースなら DisplayMember で指定している列ですね。それ以外の列に対しては使用できません。
DataSource を使っているのなら、そのソースとなるデータクラス自体に検索機能が用意されている場合が多いです。DataTable なら Select メソッド等があります。
> IDも検索対象に入るのではと思いますが
FindStringExact の対象となるのは、ComboBox に表示される文字列です。
DataTable を割り当てているなら、ComboBox.DisplayMember で指定した列を
探すことになるので、ID は検索対象にはならないかと。
ID を使って検索したいという意味であれば、ComboBox からではなく、
DataTable を .Rows.Find して対象行を探してみては如何でしょう。
主キー以外も検索対象にするなら、DataView とか。
# (2005ではなく) 2008 なら、また別のやり方もありそうですけれども。
いつもご回答ありがとうございます。
FindStringExactで実現できました。
勉強不足で申し訳ございません。
本当にありがとうございました。
ツイート | ![]() |