2017-11-07 20 views
-1

誰かが私のコードがListView内のオブジェクト全体を検索しない理由を説明できますか?基本的には、テキストボックスに入力された文字列に一致するすべてのテキストを検索しようとしています。現在、コードは最初の列のみを検索して停止します。全リストビューを検索

5列すべてを検索するにはどうすればよいですか?以下

を参照してくださいコード:

private void button3_Click(object sender, EventArgs e) 
{ 
    string s = " Search Via Forename"; 
    int result = 0; 
    int count = 0; 
    result = string.Compare(textBox1.Text, s); 

    if ((result == 0) || (String.IsNullOrEmpty(textBox1.Text))){ 
     MessageBox.Show("Please input forename..."); 
     return; 
    } 

    foreach (ListViewItem item in listView1.Items){ 
     foreach (ListViewItem.ListViewSubItem subItem in item.SubItems){ 
      if (item.Text.ToLower().StartsWith(textBox1.Text.ToLower())){ 
       count++; 
       statusBar1.Panels[2].Text = "Found: " + count.ToString(); 
      }else{ 
       listView1.Items.Remove(item); 
      } 
     } 
    } 

    button1.Text = "Clear"; 
    textBox1.Visible = false; 
    button3.Visible = false; 
    button2.Visible = false; 
} 
+0

どのようにあなたが 'ListView'を移入しますか? –

答えて

1

あなたがループ内subItemを使用することはありませんので、私のコードはthelistview

内全体のオブジェクトを検索していない理由を私に説明。私はあなたがsubItem代わりのitemを比較するためのもの推測:

foreach (ListViewItem item in listView1.Items){ 
    foreach (ListViewItem.ListViewSubItem subItem in item.SubItems){ 

       ---- use subItem here   
       | 
       v 
     if (subItem.Text.ToLower().StartsWith(textBox1.Text.ToLower())){ 
      count++; 
      statusBar1.Panels[2].Text = "Found: " + count.ToString(); 
     }else{ 
      listView1.Items.Remove(item); 
     } 
    } 
} 
+0

もっと説明してください...または例を送ってください..ありがとう –

+0

@ BOB.Gあなたはすべての項目のすべての 'ListViewSubItem'をループします。これは基本的に各列をチェックします。この変数は使用しません。投稿したコードでは、行**が特定のテキストで始まるかどうかを確認します。しかし、このテキストで始まる行があるかどうかをチェックしたいので、2番目のループのイテレータを使用してください –

+0

あなたの変更を試してみてください....それについて考えると、それは意味がありますが、空リストになりました。私はもっ​​と考えなければならないだろうと思う。見つかったオブジェクトを最初の列からのみ表示する前に使用します –