过滤从 `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` 中的数据的主要内容,如果未能解决你的问题,请参考以下文章
DataTable:如何隐藏“显示 # 到 # 个条目(从 # 个条目中过滤)”?