【问题标题】:Filter data within `datagridview` bounded from `datatable`过滤从 `datatable` 界定的 `datagridview` 中的数据
【发布时间】: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!

标签: c# .net winforms datagridview .net-4.0


【解决方案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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-07
      • 1970-01-01
      • 2015-01-21
      • 1970-01-01
      • 2012-08-10
      • 1970-01-01
      • 2010-11-18
      • 2014-08-05
      相关资源
      最近更新 更多