【问题标题】:data table filtering (multicolumn)数据表过滤(多列)
【发布时间】:2012-06-18 21:08:52
【问题描述】:

您好,我有一个数据表,我想用单个文本框过滤它,不区分大小写。换句话说,当用户开始在文本框中输入内容时,我希望RowFilter 显示包含输入信息的任何行(同样不管大小写)。

我当前的代码将仅显示完全匹配且仅针对单个列(“ID”)。我还想添加一些其他列,即“标题”、“用户名”、“公司”等。

有什么想法吗?

private void searchTextBox_TextChanged(object sender, EventArgs e)
{
   if (searchTextBox.Text.Trim() != "")
   {
      gridToTable.DefaultView.RowFilter = "ID = " + searchTextBox.Text;
   }
   else
   {
      gridToTable.DefaultView.RowFilter = string.Empty;

   }

}

【问题讨论】:

标签: c# filter datatable


【解决方案1】:

您可以在RowFilter 中使用LIKE,并将所有过滤器与OR 连接。

var rowFilter = string.Format(
        "ID LIKE '%{0}%' OR TITLE LIKE '%{1}%' OR Company LIKE '%{2}%' OR UserName LIKE '%{3}%'"
        , txtSearchID.Text
        , txtSearchTitle.Text
        , txtSearchCompany.Text 
        , txtSearchUserName.Text
    );  
gridToTable.DefaultView.RowFilter = rowFilter;

DataColumn.Expression PropertyDataView.RowFilter 的语法相同)

但老实说,我建议改用LINQ-to-DataSet,因为它更强大。

例如:

DataTable tblFiltered = gridToTable.AsEnumerable()
                       .Where(r => r.Field<int>("ID").ToString().Contains(txtSearchID.Text) 
                                || r.Field<string>("TITLE").Contains(txtSearchTitle.Text)
                                || r.Field<string>("Company").Contains(txtSearchCompany.Text)
                                || r.Field<string>("UserName").Contains(txtSearchUserName.Text))
                       .CopyToDataTable();

【讨论】:

  • 那里有 99%...它不喜欢带有空格的“用户名”列。不幸的是,有很多名字要回溯到完全重命名它。有什么建议么? A first chance exception of type 'System.Data.SyntaxErrorException' occurred in System.Data.dll Syntax error: Missing operand after 'name' operator.
  • @ikathegreat:那你需要用括号括起来:[User Name]
【解决方案2】:

网格提供了三种互补的数据过滤方法。 Row.Filtered - 显示或隐藏数据的最简单方法。但是,它不支持偶数驱动的数据模型,因此对于更复杂的应用程序没有用处。使用这种方法,程序员必须手动控制行的可见性,并考虑数据可以排序或分组,并且可以具有复杂的层次结构。

IFilter 接口 - 最高效便捷的过滤方式。程序员必须继承 IFilter 接口并实现 IsFiltered 方法。此方法使用 row 作为参数,由网格决定是否需要过滤。

列中的图形过滤器。此功能使程序员能够实现任何可用于交互式数据过滤的图形过滤器。放置在下拉框中的任何图形控件都可以用作过滤器。此类过滤器的实现基于熟悉的 UITypeEditor,它可以提供任何用户控件的更多细节,您可以访问 dapfor。 com

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-12
    • 1970-01-01
    • 2021-06-19
    • 1970-01-01
    • 1970-01-01
    • 2021-06-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多