微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用已应用过滤器的 closedXML 导出数据网格视图?

如何解决如何使用已应用过滤器的 closedXML 导出数据网格视图?

我有两个问题。第一个问题是在我导出到 excel 时过滤行后,它为我提供了所有未应用过滤器的数据。

第二个是如何用b/n两个日期过滤? ```(dgvEmployeeList.DataSource as DataTable).defaultview.RowFilter = string.Format("date ?????);

DataGridView 过滤器

 private void btnSearchEmployeeType_Click(object sender,EventArgs e)
        {
            string searchValue = cbSearchByEmployeeType.Text;
            try
            {
               (dgvEmployeeList.DataSource as DataTable).defaultview.RowFilter = string.Format("EmployeeType  like '%" + searchValue + "%'");
            }
            catch (Exception exc)
            {
                MessageBox.Show(exc.Message);
            }
        }

导出 DataGridView

 private void btnExportExcel_Click(object sender,EventArgs e)
        {
            using ( XLWorkbook workbook = new XLWorkbook())
              {

                workbook.Worksheets.Add((dgvEmployeeList.DataSource as DataTable),"Employees");// here is the problem 
                 workbook.SaveAs(sfd.FileName);
                 MessageBox.Show("You Have Successfully Exported your Data to an Excel File","Message",MessageBoxButtons.OK,MessageBoxIcon.information);
              }
        }

任何帮助!谢谢

解决方法

要设置带有日期的 RowFilter,请用 # 字符将日期值字符串括起来。为避免当前文化格式出现问题,日期带有 ToString() 以确保过滤器解析器能够理解它。请参阅下面的 PoC。


[TestMethod]
public void MyTestMethod()
{
    var dt = new DataTable();
    dt.Columns.Add(new DataColumn("dt",typeof(DateTime)));
    dt.Rows.Add(new object[] { new DateTime(1999,01,01) });
    dt.Rows.Add(new object[] { new DateTime(2000,02,01) });
    dt.Rows.Add(new object[] { new DateTime(2001,03,01) });
    dt.Rows.Add(new object[] { new DateTime(2002,04,01) });

    var startDate = new DateTime(2000,01);
    var endDate = new DateTime(2001,01);

    // use date strings between # signs and 
    // formatted via current culture to be sure it is parseable
    dt.DefaultView.RowFilter = $"dt >= #{startDate}# AND dt <= #{endDate}#";

    var r = dt.DefaultView.ToTable();
    Assert.IsTrue(r.Rows
        .Cast<DataRow>()
        .Select(i => (DateTime)i[0])
        .All(j => j >= startDate && j <= endDate));
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。