2010-11-09 3 views
0

Я прочитал много сообщений, но на самом деле ничего не нашел, чтобы помочь с этой проблемой. Я хочу выбрать все ячейки из базы данных, которая содержит текущий текст, который является типом в combobox.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 и посмотреть, как он был запущен. –

ответ

1

Вы должны изменить свой запрос, чтобы выполнить поиск LIKE (например, SELECT Customer FROM Machines WHERE Customer LIKE CmbCustomer.Text + "%"). Это позволит выбрать более узкий набор результатов, который соответствует количеству символов, которые вы вставляете.

+0

Если я использую «ole», этот запрос будет возвращать «cole, woley, boce-2»? –

+0

, если вы хотите найти что-либо, что СОДЕРЖИТ значение, вам нужно указать процент в начале и конце. Пример: «LIKE% OLE%» – Zachary

0

Вы должны проверить строку для соответствия на стороне SQLite, в выбранном запросе. «это только позволяет мне вводить 1 символ за раз», слишком неопределенно, чтобы точно рассказать вам, что случилось, но может потребоваться некоторое время для поиска. Если это так, вы можете попробовать только обновить автозаполнение каждые полсекунды или около того, используя таймер.

+0

Скажем, я начинаю вводить «cole». Я получу c в comobox, затем он выберет текст и вернет каретку в начало, поэтому, когда я набираю следующую букву «o», она стирает c и так далее. –

Смежные вопросы