数据集筛选器介于2个日期之间

本文关键字:2个 日期 之间 筛选 数据集 | 更新日期: 2023-09-27 18:28:00

你好,几天前我发布了一个类似的问题,并告诉我使用数据集过滤器来过滤我的数据网格视图。我已经尝试过了,但我正在努力想办法做到这一点。

我正试图通过两个日期时间选择器startDate和endDate来筛选数据网格视图中的截止日期列。

datagridview是TaskTable2,datetimepicker1是startSchedule,datetimepicker2是endSchedule,datagridview中的截止日期是deadlineRow

基础数据源中的TaskDataSet。

到目前为止,我已经得到了以下代码,它成功地使不在所选开始日期和结束日期之间的行不可见。

private void scheduleButton_Click(object sender, EventArgs e)
    {
        DateTime startSchedule = startDate.Value.Date;
        DateTime endSchedule = endDate.Value.Date;
        if (startSchedule <= endSchedule)// runs foreach loop if startdate and enddate are valid
        {
            foreach (DataGridViewRow dr in TaskTable2.Rows)// loops through rows of datagridview
            {
                string deadline = dr.Cells["Deadline"].Value.ToString(); // gets deadline values
                DateTime deadlineRow = Convert.ToDateTime(deadline); // converts deadline string to datetime and stores in deadlineRow variable
                if (startSchedule <= deadlineRow && deadlineRow <= endSchedule) // filters deadlines that are => startDate and <= endDate
                {
                    dr.Visible = true; // display filtered rows here.
                }
                else
                {
                    dr.Visible = false; // hide rows that are not beteen start and end date.
                    TaskTable2.CurrentCell = null;
                }
            }
        }
        else
        {    
            MessageBox.Show("Please ensure Start Date is set before End Date."); // ensures user selects an end date after the start date.
        }
    }

然而,我有一些现存的问题:

  1. 使用可见属性是错误的方法,我需要使用以下内容来过滤数据集(不确定如何做到)

    TaskDataSet.Filter = "startSchedule <= Deadline AND Deadline <= endSchedule";
    
  2. 我有一个打印按钮,应该打印过滤后的后果但是,它正在打印存储在datagridview,即使某些行是可见的=falseschedule按钮,所以这就是为什么我需要过滤数据集,然后在打印事件中使用它。

datagridview绑定到一个XML文件,因此只要数据保留在XML文件中,就可以从datagridview中删除数据进行过滤和打印。

如果有人能用数据集过滤器而不是使用可见属性来修改我的代码,我们将不胜感激。

谢谢!

数据集筛选器介于2个日期之间

您的过滤代码可以是:

DateTime startSchedule = startDate.Value.Date;
DateTime endSchedule = endDate.Value.Date;
TaskDataSet.Filter = "Deadline >='" + startSchedule + "' AND Deadline <= '" + endSchedule + "'";

至于您的第二个问题,即打印过滤结果-在VB.NET中在线找到此链接,但您可以将其转换为C#

从VB.NET 打印数据集或数据表内容

您也可以尝试DataSet.Clone(),并在行中循环以删除筛选的项目,然后打印剩余的记录。

通过选择列/行打印DataGridView

如何在C#中从DataGridView打印数据?

假设您的数据集名为"ds",并且数据存储在第一个表中,您可以这样做:

ds.Tables[0].DefaultView.RowFilter = 
    string.Format("Deadline between ( {0}, {1})",startSchedule,endSchedule );

请注意,我没有对此进行测试。