过滤从 `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` 中的数据的主要内容,如果未能解决你的问题,请参考以下文章