Фильтр DataSet между 2 датами - PullRequest
2 голосов
/ 15 марта 2012

Здравствуйте. Несколько дней назад я опубликовал похожий вопрос, и мне сказали использовать фильтр набора данных для фильтрации моего представления данных. Я попробовал, но я изо всех сил пытаюсь понять, как это сделать.

Я пытаюсь отфильтровать столбец крайнего срока в сетке данных по 2 указателям datetime - startDate и endDate.

сетка данных - TaskTable2, datetimepicker1 - startSchedule, datetimepicker2 - endSchedule, а крайний срок в сетке данных - 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. Использование свойства visible - неправильный подход, мне нужно отфильтровать набор данных, используя что-то вроде следующего (не знаю, как это сделать)

    TaskDataSet.Filter = "startSchedule <= Deadline AND Deadline <= endSchedule";
    
  2. У меня есть кнопка печати, которая должна печатать отфильтрованные Результаты. Тем не менее, он печатает все данные, хранящиеся в datagridview, даже если некоторые строки видны = ложь от нажатия кнопка расписания, поэтому мне нужно отфильтровать набор данных, а затем используйте это в событии печати. ​​

Представление сетки данных связано с файлом XML, поэтому данные могут быть удалены из представления таблицы данных для фильтрации и печати в течение всего времени, пока они остаются в файле XML.

Если бы кто-то мог изменить мой код с помощью фильтра набора данных вместо использования свойства visible, это было бы очень полезно.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 15 марта 2012

Код фильтра может быть:

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

TaskDataSet.Filter = "Deadline >='" + startSchedule + "' AND Deadline <= '" + endSchedule + "'";

Что касается вашей второй проблемы с печатью отфильтрованных результатов - вы нашли эту ссылку онлайн в VB.NET, но вы можете преобразовать ее в C #

Печать содержимого DataSet или DataTable из VB.NET

Можно также попробовать DataSet.Clone() и выполнить цикл по строкам, чтобы удалить отфильтрованные элементы, а затем распечатать оставшиеся записи.

Печать DataGridView с помощью выбора столбцов / строк

Как можно распечатать данные из DataGridView в C #?

0 голосов
/ 15 марта 2012

предположим, что ваш набор данных называется 'ds' и данные хранятся в первой таблице, вы можете сделать это:

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

Обратите внимание, что я не проверял это.

...