为什么“ DataView”行过滤器仅接受两个字符

时间:2019-08-22 17:18:39

标签: c# .net

我有一个'DataTable',其中填充了SqlServer表中的项目。 “ DataTable”中有两列:“ id”是SqlServer表中行的标识值,“ job”是对象的名称。

我有一个使用'.Net'框架以'C#'编写的数据库客户端。它包含一个“列表框”,一个“文本框”,一个“数据表”和一个“数据视图”。 'DataView''DataSource'设置为'DataTable'。 “列表框”“数据源”设置为“数据视图”。表格中有1700行。

我寻找正确项目的首选方法是让用户开始在文本框中键入内容,并且列表中的每个字母都会减少,直到用户可以轻松找到所需的内容为止。然后,用户可以双击它并采取一些措施。我已将此技术与“ BindingSource”一起使用,并且效果很好。我在使用“ DataView”时遇到麻烦。用户键入的前两个字母效果很好。但是,键入第三个字母时,即使过滤器字符串正确,“ ListBox”也将变为空白。为什么它停止使用第三个字母?任何帮助将不胜感激。

这是“作业”字段中数据的示例:“ 08-CBM-01-公用事业用水调查” 字段“ id”中的数据只是SqlServer中的“ int”身份。

我尝试检查变量strLookup和strFilter,因为使用键盘进行了输入,并且看起来是正确的。

DataTable tblSelectList;
DataView dvSelectList; 
private string strFilter = "";
private string strLookup = "";

private void tbLookup_TextChanged(object sender, EventArgs e)
{
     strLookup = tbLookup.Text.ToString();
     if (strLookup.Length > 1)
     {
           strFilter = "job Like '%" + strLookup + "%'";
           dvSelectList.RowFilter = strFilter;
     }
     else { dvSelectList.RowFilter = "job = 'z'"; }
     btnDone.Enabled = false;
}

private void SetupLbSelect()
{
     if (dvSelectList == null) { dvSelectList = new DataView(tblSelectList); }
     lbSelect.DataSource = dvSelectList;
     dvSelectList.RowFilter = "job = 'z'";
     lbSelect.DisplayMember = "job";
     lbSelect.ValueMember = "id";
}

无错误消息。列表框开始按预期的方式填充第一个两个字符,然后空白填充第三个字符。我希望输入“ Topo”,并显示所有包含“ Topo”的项目。

1 个答案:

答案 0 :(得分:0)

我从代码页中删除了该过程以及其他几个过程,并再次输入了它们。之后,该功能将按预期工作。谢谢LarsTech,他告诉我原始代码对他有用。