我有 DataTable 绑定到 绑定源 ,形成 DataSource DataGridView
为了过滤DataGridView的内容,我设置了以下过滤器
bs.Filter = string.Format("Result LIKE '%{0}%'", "Match");
这很好。但是现在我需要将DataTable中的匹配项导出到Excel文件。我正在使用 EPPlus 库并使用我保存文件以下代码
var excel = new OfficeOpenXml.ExcelPackage();
var ws = excel.Workbook.Worksheets.Add("worksheet-name");
// you can also use LoadFromCollection with an `IEnumerable<SomeType>`
ws.Cells["A1"].LoadFromDataTable(mydatatable, true, OfficeOpenXml.Table.TableStyles.Light1);
ws.Cells[ws.Dimension.Address.ToString()].AutoFitColumns();
using (var file = File.Create(dia.FileName))
excel.SaveAs(file);
我如何以与使用DataGridView类似的方式过滤DataTable中的项目?
答案 0 :(得分:1)
您可以使用Select()方法过滤数据表,将结果复制到新数据表中并使用它来加载工作表。试试这个:
var expression = string.Format("Result LIKE '%{0}%'", "Match");
var filteredResults = sourceTable.Select(expression).CopyToDataTable();
ws.Cells["A1"].LoadFromDataTable(filteredResults, true, OfficeOpenXml.Table.TableStyles.Light1);
答案 1 :(得分:0)
将数据源转换为DataTable并使用包含已过滤数据的DataTable.DefaultView
属性。
var source = (BindingSource)datagridView.DataSource;
var data = (DataTable)source.DataSource;
var filteredData = data.DefaultView.ToTable();
为了过滤DataTable,使用Select
方法并传递相同的表达式
var filterBy = "Match";
var filter = $"Result LIKE '%{filterBy}%'"
var fileteredRows = originalDataTable.Select(filter).CopyToDataTable();