【发布时间】:2021-04-02 11:27:30
【问题描述】:
我的 DataGridView 中有列(“Region”、“Customer”、“Salesman”、“Brand”、“Groups”、“Category”和“Product”)现在我想首先应用基于“Region”的过滤器然后在过滤后的数据上想要对“客户”应用过滤器,并希望对过滤后的数据应用“销售员”过滤器。我用过这段代码
private void BtnApplyFilter_Click(object sender, EventArgs e)
{
(SalesView.DataSource as DataTable).DefaultView.RowFilter = null;
if (RegionName != "All")
{
(SalesView.DataSource as DataTable).DefaultView.RowFilter = string.Format("Region='{0}'", CbRegions.Text);
}
if (CustomerName != "All")
{
(SalesView.DataSource as DataTable).DefaultView.RowFilter = string.Format("Customer='{0}'", CbCustomers.Text);
}
if (SalesmanName != "All")
{
(SalesView.DataSource as DataTable).DefaultView.RowFilter = string.Format("Salesman='{0}'", CbSalesmen.Text);
}
if (BrandName != "All")
{
(SalesView.DataSource as DataTable).DefaultView.RowFilter = string.Format("Brand='{0}'", CbBrands.Text);
}
if (GroupName != "All")
{
(SalesView.DataSource as DataTable).DefaultView.RowFilter = string.Format("Groups='{0}'", CbGroups.Text);
}
if (CategoryName != "All")
{
(SalesView.DataSource as DataTable).DefaultView.RowFilter = string.Format("Category='{0}'", CbCategories.Text);
}
if (ItemName != "All")
{
(SalesView.DataSource as DataTable).DefaultView.RowFilter = string.Format("ProductName='{0}'", CbProducts.Text);
}
SalesView.ClearSelection();
GetTotals();
}
我尝试使用“AND”运算符将所有过滤器组合在一个字符串中,但这不起作用,因为“All”值就像用户选择“All”时一样,在过滤器字符串中我用空字符串替换“All”不工作我也试过 Like 运算符。现在任何人都可以告诉我如何使用/将过滤后的数据提供给第二个过滤器,然后将过滤后的数据提供给第三个过滤器,依此类推?因为当我应用第二个过滤器时,它不会应用于过滤后的数据,而是应用于原始完整数据。
【问题讨论】:
-
我认为您最好的选择是使用集合视图。这将允许进行各种过滤和排序:Filter Data in a View 和 How to filter
标签: c# filter datagridview datagrid