DateTimePicker имеет свойство Value, которое содержит выбранную дату.Эту дату следует использовать для формирования запроса, который выглядит следующим образом:
where somedate >= datetimepicker.Value.Date
and somedate < datetimepicker.Value.Date.AddDays(1)
, где .Date возвращает только часть даты DateTime.Чтобы подготовить предложение where, замените where часть SqlCeCommand на
" where conno >= @startDate and conno < @endDate"
Добавьте два параметра в SqlCeCommand
com.Parameters.Add (new SqlCeParameter("@startDate", SqlDbType.DateTime,
textbox1.Value.Date));
com.Parameters.Add (new SqlCeParameter("@endDate", SqlDbType.DateTime,
textbox1.Value.Date.AddDays(1)));
и выполните аналогичное упражнение с cmpsno.
ОБНОВЛЕНИЕ: Я полностью пропустил последний метод.
private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
{
bRDATABindingSource1.Filter = string.Format("dsysdate >= '{0:yyyy-MM-dd}' AND dsysdate < '{1:yyyy-MM-dd}'", dateTimePicker1.Value, dateTimePicker1.Value.AddDays(1));
}
Попытка объяснения:
Поскольку dsysdate имеет компонент времени, вам нужно отфильтровать интервал, начиная св полночь и до полуночи следующего дня - это Value.AddDays (1).К сожалению, я не знаю много о фильтрации BindingSource, потому что я в основном фильтрую на уровне базы данных, отсюда первый код.Возможно, вы захотите переписать dateTimePicker1_ValueChanged для получения данных из базы данных вместо фильтрации в памяти;это будет окупаться при работе с большими таблицами из-за индексов.
Говоря об этом, вы могли бы рассмотреть структурирование вашего кода по-другому.Такая задача обычно выполняется методом, который проверяет элементы управления фильтрацией, создает запрос и выполняет его, тем самым устраняя дублирующийся код и позволяя выполнять фильтрацию по нескольким критериям одновременно.Метод, который вызывается при изменении содержимого элемента управления фильтрацией.