【问题标题】:Why is 'DataView' row filter is only accepting two characters为什么“DataView”行过滤器只接受两个字符
【发布时间】:2019-08-22 17:18:39
【问题描述】:

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

我有一个使用“.Net”框架用“C#”编写的数据库客户端。它包含一个“ListBox”、一个“TextBox”、一个“DataTable”和一个“DataView”。 'DataView' 'DataSource' 设置为 'DataTable'。 'ListBox' 'DataSource' 设置为 'DataView'。表中有 1700 行。

我首选的查找正确项目的方法是让用户开始在文本框中输入,并且随着每个字母列表逐渐减少,直到用户可以轻松找到所需的项目。然后用户可以双击它并采取一些行动。我已经将这种技术与“BindingSource”一起使用,并且效果很好。我在使用“DataView”时遇到问题。用户键入的前两个字母效果很好。但是当输入第三个字母时,'ListBox' 变为空白,即使过滤器字符串是正确的。为什么它停止使用第三个字母?任何帮助将不胜感激。

这是“工作”字段中的数据样本:“08-CBM-01 -- Water Utilities Topo Survey” “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";
}

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

【问题讨论】:

  • 代码有效。根据您的示例数据,“job = 'z'”应该意味着列表为空。你可能想要if (strLookup.Length > 0) 而不是> 1
  • 谢谢 LarsTech。在阅读了您的文本后,我从代码页中删除了该过程,以及其他几个过程并重新输入了它们。然后代码按预期为我工作。我使用 strLookup.Length > 1 因为使用 0 产生了太多记录。在 1,700 个项目的列表中,我认为在产生结果之前要求两个字符是合理的。这次我使用了 DataView 而不是 BindingSource,因为我认为 DataView 会使用更少的资源。你知道这是不是真的吗?
  • 没关系。使用适合您的工具。

标签: c# .net


【解决方案1】:

我从代码页中删除了程序和其他几个程序,然后再次输入。之后,该功能按预期工作。感谢 LarsTech,他告诉我原始代码对他有用。

【讨论】:

    猜你喜欢
    • 2013-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-01
    • 1970-01-01
    相关资源
    最近更新 更多