过滤从 `datatable` 界定的 `datagridview` 中的数据

Posted

技术标签:

【中文标题】过滤从 `datatable` 界定的 `datagridview` 中的数据【英文标题】:Filter data within `datagridview` bounded from `datatable` 【发布时间】:2019-02-16 09:25:31 【问题描述】:

我正在尝试在data table 范围内过滤datagridview 内的数据,如下在exchange 事件中,但是当我清除来自datagridview 的所有数据时不会 返回它是原始数据(我的意思是没有过滤器)它显示的是最后一个 数据过滤

最后一个问题是link answer 中使用 LINQ 方法的过滤器比我使用的过滤器好?

因为我有大约 7 个 textbox 用作过滤器

    private void TB_FirstName_TextChanged(object sender, EventArgs e)
    
        if (!string.IsNullOrWhiteSpace(TB_FirstName.Text))
        
            (DGV_SearchResult.DataSource as DataTable).DefaultView.RowFilter = string.Format("NAM LIKE '%0%'", TB_FirstName.Text);
        
    

【问题讨论】:

最好插入一个BindingSource! 【参考方案1】:

添加一个 else 以在文本框为空时重新绑定数据源,例如

private void TB_FirstName_TextChanged(object sender, EventArgs e)

    if (!string.IsNullOrWhiteSpace(TB_FirstName.Text))
        
            (DGV_SearchResult.DataSource as DataTable).DefaultView.RowFilter = string.Format("NAM LIKE '%0%'", TB_FirstName.Text);
        
    else
         
           // Load data again
        

【讨论】:

【参考方案2】:

要重置过滤器,您应该将RowFilter 属性设置为string.Empty 或null:

private void TB_FirstName_TextChanged(object sender, EventArgs e)

    var dt = DGV_SearchResult.DataSource as DataTable;
    if (!string.IsNullOrWhiteSpace(TB_FirstName.Text))
        dt.DefaultView.RowFilter = string.Format("NAM LIKE '%0%'", TB_FirstName.Text);
    else
        dt.DefaultView.RowFilter = string.Empty;

【讨论】:

以上是关于过滤从 `datatable` 界定的 `datagridview` 中的数据的主要内容,如果未能解决你的问题,请参考以下文章

对 DataTables 中的过滤列求和

DataTables 也应用列格式来过滤

对datatable进行linq过滤

DataTable:如何隐藏“显示 # 到 # 个条目(从 # 个条目中过滤)”?

如何从 Datatables jQuery 插件中提取过滤后的数据?

将表数据添加到可编辑的 DataTables 会删除过滤器