Как я могу получить только дату, но не час, даты в фильтре DataGridView? - PullRequest
3 голосов
/ 21 января 2020

У меня есть DataGridView, один из его столбцов является столбцом даты со значениями, подобными следующим:

21/01/2020 09: 14

20/01/2020 10:15

И я хочу отфильтровать этот DataView, используя ввод даты из textBox.

У меня есть такой код:

 string filter = "1 = 1";

 if (date_textBox.Text != "")
 {
     try
     {
         DateTime inputDate = DateTime.Parse(date_textBox.Text);

         filter += String.Format(" AND Convert(dateColumn, System.Date) = '{0}'", inputDate.ToShortDateString());
     }
     catch (FormatException)
     {
         //Invalid date, do nothing
     } //try-catch
 } //if

 myDataView.RowFilter = filter; // <=========Error in this line

Я получил ошибку при применении фильтр для DataView, потому что он не понимает System.Date. Я также пробовал Date, DateTime, System.DateTime и варианты такого рода.

Итак, в какой тип мне нужно преобразовать этот столбец даты? Или есть какая-то функция, которую я могу вызвать в rowFilter, которая будет возвращать только дату, но не время?

1 Ответ

1 голос
/ 21 января 2020

Если использование RowFilter является ОБЯЗАТЕЛЬНЫМ, тогда это будет работать (я не рекомендую, но работало бы):

if (DateTime.TryParse(date_textBox.Text, out DateTime inputDate))
{
     var filter = $" (dateColumn >= '#{inputDate.ToString("yyyy/MM/dd")}#'"+
                  $" And dateColumn < '#{inputDate.AddDays(1).ToString("yyyy/MM/dd")}#')";

 myDataView.RowFilter = filter;
}

Если генерирование отфильтрованного DataTable из существующего DataTable подойдет, я предпочитаю такой подход:

var data = tbl.AsEnumerable() 
 .Where(row => ((DateTime)row["dateColumn"]).Date == inputDate)
 .CopyToDataTable();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...