2010-11-09 60 views
0

我讀了很多帖子,但還沒有真正發現任何可以幫助解決這個問題的東西。我想從數據庫中選擇包含組合框中當前文本類型的所有單元格。C#ComboBox自動完成建議

但是,當我嘗試這種方式,它只允許我一次輸入1個字符。

private void GetSource(object sender, EventArgs e) 
{ 
    var src = new AutoCompleteStringCollection(); 

    var tmp = _sqlite.GetDataTable("select customer from Machines"); 
    foreach (DataRow r in tmp.Rows) 
    { 
     if (r[0].ToString().Contains(CmbCustomer.Text)) 
      src.Add(r[0].ToString()); 
    } 

    CmbCustomer.AutoCompleteCustomSource = src; 

} 

有沒有辦法做到這一點?預先感謝!

+0

問題不在於此代碼段中。如果是的話,你已經找到了它。嘗試爲SelectedIndexChanged事件添加處理程序,並查看它是如何觸發的。 – 2010-11-10 00:35:48

回答

1

您應該更改您的查詢以進行LIKE搜索(例如,SELECT客戶來自機器,客戶喜歡CmbCustomer.Text +「%」)。這將選擇一個較窄的結果集,以便與您輸入的字符匹配。

+0

如果我輸入「ole」,該查詢是否會返回「cole,woley,boce-2」? – 2010-11-09 23:01:46

+0

如果您想要搜索包含值的任何內容,則需要在開始和結束時輸入百分比。例如:「LIKE%OLE%」 – Zachary 2010-11-09 23:07:33

0

您應該在選擇查詢中檢查字符串中SQLite一側的匹配項。 「它只允許我一次輸入1個字符」太含糊不清,不能準確地告訴你發生了什麼問題,但可能需要一些時間才能完成搜索。如果是這樣,您可以嘗試僅使用計時器每半秒鐘刷新一次自動完成。

+0

假設我開始鍵入「cole」,我將在組合框中獲得c,然後選擇文本並將插入符號設置回到開頭,因此,當我鍵入下一個字母'o'時,它將刪除c等等。 – 2010-11-09 22:57:10