C# ComboBox实时模糊查询,解决'数据源中没有 DataRow'错误
C# ComboBox实时模糊查询,解决'数据源中没有 DataRow'错误
在使用C#开发应用程序时,我们经常需要使用ComboBox控件来提供下拉列表供用户选择。为了提升用户体验,我们希望实现实时模糊查询功能,即根据用户输入的文本动态更新下拉列表内容。
然而,在使用CopyToDataTable方法实现实时模糊查询时,你可能会遇到'数据源中没有 DataRow'的错误。这是因为在输入内容进行模糊查询时,可能没有匹配的数据行导致无法复制到新的DataTable中。
为了解决这个问题,我们可以采用另一种方法来实现ComboBox的实时模糊查询功能,并避免该错误的发生。
步骤如下:
-
添加ComboBox控件: 在窗体中添加一个ComboBox控件,并将其
DropDownStyle属性设置为DropDown,使其可编辑。 -
创建并填充DataTable: 创建一个DataTable,并添加需要绑定的数据。
// 添加数据到DataTable dataTable.Rows.Add('Apple'); dataTable.Rows.Add('Banana'); dataTable.Rows.Add('Orange'); dataTable.Rows.Add('Peach'); dataTable.Rows.Add('Pear'); dataTable.Rows.Add('Grapes'); ``` -
绑定数据源: 将创建的DataTable绑定到ComboBox的
DataSource属性上。csharp comboBox1.DataSource = dataTable; comboBox1.DisplayMember = 'Name'; -
实现实时模糊查询: 在ComboBox的
TextChanged事件中,实现实时模糊查询功能。var filteredData = dataTable.AsEnumerable() .Where(row => row.Field<string>('Name') .ToLower() .Contains(searchText.ToLower())) .ToList(); if (filteredData.Count > 0) { comboBox1.DataSource = filteredData; comboBox1.DisplayMember = 'Name'; comboBox1.DroppedDown = true; // 展开下拉菜单显示结果 comboBox1.SelectionStart = searchText.Length; // 将光标移动到文本末尾 comboBox1.SelectionLength = 0; // 清除选择内容 } else { comboBox1.DataSource = null; // 清空数据源 comboBox1.Text = searchText; // 保留输入的文本 comboBox1.DroppedDown = false; // 关闭下拉菜单 } } ``` -
处理回车键: 为ComboBox的
KeyUp事件添加一个处理程序,以便在按下回车键时将所选结果显示在ComboBox中。csharp private void comboBox1_KeyUp(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { if (comboBox1.Items.Count > 0) { comboBox1.Text = comboBox1.Items[0].ToString(); } comboBox1.DroppedDown = false; // 关闭下拉菜单 comboBox1.SelectionStart = comboBox1.Text.Length; // 将光标移动到文本末尾 comboBox1.SelectionLength = 0; // 清除选择内容 } }
总结:
通过以上步骤,我们实现了C# ComboBox的实时模糊查询功能,并解决了'数据源中没有 DataRow'错误。这种方法可以有效避免错误的发生,并为用户提供更流畅、高效的操作体验。
原文地址: https://www.cveoy.top/t/topic/RrI 著作权归作者所有。请勿转载和采集!