【发布时间】:2019-01-27 14:27:59
【问题描述】:
我正在使用带有组合框的 Winform,组合框设置为 AutoCompleteMode = 建议 和 AutoCompleteSource = 列表。
自动完成的值存储在 SQLite 数据库中。 由于该表中的数据量很大,因此在创建表单时加载所有值是没有意义的。
Insted,我想针对用户输入运行查询。
f.E.用户键入“S”->然后查询应该只返回值“... WHERE x LIKE S%;
这工作正常 - 有一种奇怪的行为,我还没有弄清楚。
为了防止在没有空字符串的情况下触发 SQL 查询,我使用以下代码:
private void cb_City_KeyDown(object sender, KeyEventArgs e)
{
if (Globals.UseAutoFillOnCities == true)
{
if (!string.IsNullOrEmpty(cb_city.Text))
{
foreach (DataRow AutoFillItems in dbAction.GetAutoComplete("CITIES", cb_city.Text).Rows)
{
AutoFillCities.Add(AutoFillItems[0].ToString());
}
cb_city.DataSource = AutoFillCities;
}
}
}
现在,对于我的表单的奇怪行为: 当我运行应用程序并转到我的组合框时, 我从在其中输入“S”开始。
但是,comboBox.Text 将被附加到我的数据库中的第一个匹配项,该匹配项不是以“S”开头,而是以“A”开头(就像我已经为 LIKE 语句完成了没有任何字符串的查询。
而且,为什么组合框会显示这个值,而不是只显示下拉菜单?
如果我删除 ComboBox 中的每个字符并再次尝试,一切都会按预期工作。 这只是表单创建后的第一个行为。
[编辑] 谢谢@dafie:
谢谢,我已经改变了这个(这也是我之前的尝试之一) - 但是,控件的行为也很奇怪。
当我输入第一个字母时,没有任何反应(它不会显示带有建议的列表)。 然后当我输入第二个字母时,它会删除我输入的第一个字符,只有第二个是可见的,并且组合框将附加带有“S”的搜索的第一个建议。
例如,我想键入“St”,然后我的组合框中将有 t“Saal”。 (Saal 是带“S”的搜索的第一个结果)
问题是:如果我只将 AutoComplete 方法设置为“建议”,为什么 ComboBox 会附加文本? 为什么我的第一个输入会被删除?
【问题讨论】:
-
顺便说一句:我已经为上面的代码尝试过 keyDown 和 keyPress 事件。
-
你用什么事件来触发你的代码?
-
我已经为 cb_city 尝试了 KeyDown 和 KeyPress 事件: private void cb_City_KeyDown(object sender, KeyEventArgs e) { }
标签: c# visual-studio combobox autocomplete autosuggest