【问题标题】:How I can show/fetch Excel data from date to date in datagridview in C# .NET如何在 C# .NET 的 datagridview 中显示/获取 Excel 数据
【发布时间】:2019-11-14 08:07:24
【问题描述】:

我必须在 C# .NET 中编写一个程序,在 datagridview 中加载并显示 Excel 文件中的数据,然后我想使用 date to date(filter) 根据选择的日期显示 Excel 文件数据。 我的 Excel 中有 7 列和 1800 行,我有 DateTimePicker1 和 DateTimePicker2 来选择 from_to(date) 和按钮来显示过滤器(date to date)。 我编写了一个程序,可以在 datagridview 中下载并显示 excel 文件,但我无法显示过滤日期。 您能帮帮我吗,我如何在 C# 中对我的 excel 文件数据进行过滤。

在这里我需要帮助,请问如何显示 Date to Date excel 数据,我尝试使用此代码,但它不起作用,

    //======================Filter button ========================
    private void Button3_Click(object sender, EventArgs e)
    {

        try
        {

            DateTime startSchedule = startDate.Value.Date;
            DateTime endSchedule = endDate.Value.Date;


            string constr = string.Format("Provider = Microsoft.ACE.OLEDB.12.0; Data Source =" + tb_path.Text + ";Extended Properties = \"Excel 12.0; HDR=Yes;\"; ");
            OleDbConnection con = new OleDbConnection(constr);
            OleDbCommand command = new OleDbCommand("Select * From[" + drop_down_sheet.SelectedValue + "]", con);
            OleDbDataAdapter sda = new OleDbDataAdapter(command);
            DataTable dt = new DataTable();
            sda.Fill(dt);
           /* foreach (DataRow row in dt.Rows)
            {
                dataGridView1.DataSource = dt;
                dt.DefaultView.RowFilter = string.Format(tb_path.Text); //?.....

            }*/
string filter = "Date > '" + startDate.Value.ToString("yyyy-MM-dd") + "' AND  Date < '" + endDate.Value.ToString("yyyy-MM-dd") + "'";
          DataRow[] filteredRows = dt.Select(filter);
          dataGridView1.DataSource = filteredRows.CopyToDataTable();


        }

        catch (Exception ex)
        {
            MessageBox.Show(ex.Message,
         "Important Note",
         MessageBoxButtons.OK,
         MessageBoxIcon.Error,
         MessageBoxDefaultButton.Button1);

        }
    }

【问题讨论】:

    标签: c# .net filter


    【解决方案1】:

    你并没有大错特错!在DataTable 中过滤结果的最简单方法是使用返回DataRow[]Select 方法。这需要转换回DataTable 以用作DataSource

    类似这样的东西(在Fill之后):

    string filter = "YourDateColumn > '" + dateTimePicker1.Value.ToString("yyyy-MM-dd") + "' AND YourDateColumn < '" + dateTimePicker2.Value.ToString("yyyy-MM-dd") + "'";
    DataRow[] filteredRows = dt.Select(filter);
    dataGridView1.DataSource = filteredRows.CopyToDataTable();
    

    显然,您需要将 YourDateColumn 更改为电子表格中列的名称。

    【讨论】:

    • 谢谢你的回答,但是我必须把这段代码放在 for 循环之前或之后,我是否应该在我的代码中更改一些东西。
    • 不,它会替换您的整个 foreach 循环。 DataSource 只设置一次!
    • 我是否应该在这一行中改变一些东西,OleDbCommand command = new OleDbCommand("Select * ", con);//?......
    • 在不知道您的电子表格的情况下很难说,但通常它应该是 "Select * FROM [Sheet1$]" 行中的内容,假设工作表名为 Sheet1 - 英文 Excel 的默认值
    • 编辑后请看我的代码,我替换你的代码,对吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-08
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    • 2010-11-24
    • 1970-01-01
    相关资源
    最近更新 更多