2013-08-06 79 views
-1

我創建了一個泛型詞典,它的功能類似於一個庫,它能夠添加,刪除和搜索書籍,並且我已經獲得了對搜索功能期望的這些功能。泛型詞典搜索功能

搜索功能有兩個字段:標題和ISBN,我可以使用ISBN搜索書籍,但標題不能。

這是我的查詢碼:

private void Searchbtn_Click(object sender, EventArgs e) 
    { 
     string searchTerm = TitleBox.Text; 

     if (ISBNBox.Text.Length == 5) 
     { 
      foreach (KeyValuePair<string, Book> b in books) 
      { 
       if (b.Value.ISBN == int.Parse(ISBNBox.Text)) 
       { 
        ISBNBox.Text = b.Value.ISBN.ToString(); 
        TitleBox.Text = b.Value.Title.ToString(); 
        chkLoan.Enabled = true; 
       } 
      } 
     } 
     else if (TitleBox.Text != "") 
     { 
      foreach (KeyValuePair<string, Book> b in books) 
      { 
       if (b.Value.Title.ToLower().Contains(searchTerm)) 
       { 
        ISBNBox.Text = b.Value.ISBN.ToString(); 
        TitleBox.Text = b.Value.Title; 
        chkLoan.Enabled = true; 
       } 
      } 
     } 
     else 
     { 
      MessageBox.Show("Searching Requires the ISBN or Title field to be filled"); 
     } 
    } 

我怎樣才能讓我的搜索功能,讓我搜索標題藏漢?

我該如何去尋找一個部分字符串?例如。我可以搜索「Cool」,而不是「Cool Story Bro」,它會找到所有帶有「Cool」的實例。

編輯:用我在這裏學到了我充分的工作搜索功能:)

+1

顯然「酷故事兄弟」不會包含「酷」。您是否嘗試使您的搜索字詞小寫? –

+0

我附加了我的搜索功能來搜索小寫字母,現在 – Goku321

回答

0

試試這個

foreach (KeyValuePair<string, Book> b in books) 
{ 
    if (b.Value.Title.IndexOf(searchTerm,StringComparison.InvariantCultureIgnoreCase) >=0) 
    { 
     ISBNBox.Text = b.Value.ISBN.ToString(); 
     TitleBox.Text = b.Value.Title; 
     chkLoan.Enabled = true; 
    } 
} 

IndexOf方法給定字符串的第一個指標,如果發現,可選它允許我們搜索CaseInsensitive

+0

CaseInsensitive是什麼意思? – Goku321

+0

即使當string1爲UpperCase且string2爲LowerCase時,它也會匹配,反之亦然。 –

0

你在那裏應該工作。暗隼建議嘗試:

string searchTerm = TitleBox.Text.ToLower(); 
0

我可能會丟失在你的問題的細節,但總的來說,如果你想要做一個關鍵字搜索鍵和值的都有,你可以做這樣的事情:

Dictionary<string, Book> d = new Dictionary<string, Book>(); 
//Fill dictionary 
string searchterm = //get searchterm 
List<Book> results = new List<Book>(); 
results.AddRange(from i in d where i.Key.Contains(searchterm) select i.Value); 
results.AddRange(from i in d where i.Value.Title.Contains(searchterm) select i.Value); 
//Print Results