2015-05-06 40 views
-1

我有一個ListView,它直接從數據庫獲取數據。我想用它來使用任何變量搜索記錄,即名稱,編號或位置。目前我能夠搜索但只使用一個變量。使用帶選項的ListView搜索

這是我的代碼:

public void searchlist() 
{ 
    if (searchbox.Text != "") 
    { 
     for (int i = listView1.Items.Count - 1; i >= 0; i--) 
     { 
      var item = listView1.Items[i]; 
      if (item.Text.Contains(searchbox.Text)) 
      { 
       item.BackColor = SystemColors.Highlight; 
       item.ForeColor = SystemColors.HighlightText; 
      } 
      else 
      { 
       listView1.Items.Remove(item); 
      } 
     } 
     if (listView1.SelectedItems.Count == 1) 
     { 
      listView1.Focus(); 
     } 
    } 
    else 
    { 
     loadthelist(); 
    } 
} 
+0

_「目前,我能夠搜索到,但只使用一個變量」 _這是什麼意思?哪個變量?還要注意,這是一個陳述,而不是一個問題。顯然,你希望能夠通過所有變量進行搜索,而不僅僅是一個,但你需要什麼幫助?這也有助於瞭解什麼'listView.Items'包含順便說一句。 – stakx

+0

據我所知你的問題,你想要的是能夠搜索多個變量。但是,您希望這些都來自相同的輸入框,並在所有列上搜索該值?每個列的輸入並具有必須匹配的多個搜索值?這究竟是什麼,是你想要的結果,你試過什麼? – maam27

+0

如果您想要查找SubItems(https://msdn.microsoft.com/en-us/library/system.windows.forms.listviewitem.subitems(v=vs.110).aspx)集合,遍歷所有其他列值並根據搜索文本進行測試。正如其他評論所指出的那樣,從問題中確切地說明你究竟在做什麼並不清楚。 – ScheuNZ

回答

0

看起來你需要這個:

private class TestClass 
    { 
     public int Id 
     { 
      get; 
      set; 
     } 

     public string Text 
     { 
      get; 
      set; 
     } 

     public string Detail 
     { 
      get; 
      set; 
     } 
    } 

    private void ListViewSearch_Load(object sender, EventArgs e) 
    { 
     List<TestClass> source = new List<TestClass>(); 
     source.Add(new TestClass { Id = 1, Text = "one", Detail = "D1" }); 
     source.Add(new TestClass { Id = 2, Text = "two", Detail = "D2" }); 
     source.Add(new TestClass { Id = 3, Text = "three", Detail = "D1" }); 
     source.Add(new TestClass { Id = 4, Text = "four", Detail = "D3" }); 
     source.Add(new TestClass { Id = 5, Text = "five", Detail = "D6" }); 
     source.Add(new TestClass { Id = 6, Text = "5", Detail = "D6" }); 

     listView1.Columns.Add("Id"); 
     listView1.Columns.Add("Text"); 
     listView1.Columns.Add("Detail"); 

     source.ForEach(x => 
     { 
      ListViewItem item = new ListViewItem(x.Id.ToString()); 
      item.UseItemStyleForSubItems = false; 
      item.SubItems.Add(x.Text); 
      item.SubItems.Add(x.Detail); 
      listView1.Items.Add(item); 
     }); 

     listView1.View = View.Details; 

     listView1.GridLines = true; 



     comboBox1.DataSource = listView1.Columns; 
     comboBox1.DisplayMember = "Text"; 
     comboBox1.ValueMember = "Text"; 

    } 

    private void textBox1_Leave(object sender, EventArgs e) 
    { 
     if (!string.IsNullOrEmpty(textBox1.Text)) 
     { 
      foreach (ListViewItem item in listView1.Items) 
      { 
       for (int subItemIndex = 0; subItemIndex < item.SubItems.Count; subItemIndex++) 
       { 
        if (subItemIndex == comboBox1.SelectedIndex && item.SubItems[subItemIndex].Text.Contains(textBox1.Text)) 
        { 
         item.SubItems[subItemIndex].BackColor = SystemColors.Highlight; 
         item.SubItems[subItemIndex].ForeColor = SystemColors.HighlightText; 
        } 
        else 
        { 
         item.SubItems[subItemIndex].BackColor = Color.Transparent; 
         item.SubItems[subItemIndex].ForeColor = SystemColors.WindowText; 
        } 
       } 
      } 
     } 
    } 
+0

感謝丹麥它的工作 – tallman