过滤“ datagridview”中以“ datatable”为界的数据

时间:2018-09-11 19:51:56

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

datagridview事件中,我试图过滤data table内的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);
        }
    }

2 个答案:

答案 0 :(得分:2)

添加一个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
        }
}

答案 1 :(得分:1)

要重置过滤器,您应该将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;
}