ListView中的多列搜索

时间:2017-11-06 09:49:54

标签: c# listview

好的...所以我有一个搜索ListView的工作程序。这个程序 但是,它只能搜索5列中的1列。我的愿望是 得到程序来搜索前两个名字和姓氏的列。我找到了一行代码,假设这样做,但在编译之后会产生错误。下面是我的代码的摘录。和我试图使用的线。

提前感谢所有帮助和建议

  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.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;
  }

1 个答案:

答案 0 :(得分:0)

这是因为您引用了一个名为item的未声明的变量,该变量从未被声明或实例化。

循环列表项时,您需要使用:

foreach(ListViewItem item in listView1.Items)

这将使用名为ListView的变量迭代Items item,该变量将在每次迭代时保留当前项目。

试试这段代码:

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)
     {
         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 = button3.Visible = button2.Visible = false;
}