Фильтрация в DataTable не работает для DateTime.Now или DateTime.AddDays. - PullRequest
0 голосов
/ 26 июня 2018

Я пытаюсь отфильтровать DateTime в DataTable и испытываю странную проблему с фильтрацией.

1) Данные и фильтрация - работает нормально

public DataTable GetDataTable()
{
DataTable employeeCollection = new DataTable();
var dt = DateTime.Now;

employeeCollection.Columns.Add("EmployeeID", typeof(int));
employeeCollection.Columns[0].ColumnName = "Employee ID";
employeeCollection.Columns.Add("EmployeeName", typeof(string));
employeeCollection.Columns["EmployeeName"].ColumnName = "Employee Name";
employeeCollection.Columns.Add("CustomerID", typeof(string));
employeeCollection.Columns["CustomerID"].ColumnName = "Customer ID";
employeeCollection.Columns.Add("Country", typeof(string));
employeeCollection.Columns.Add("Date", typeof(DateTime));

DateTime date1 = new DateTime(2011, 6, 26, 4, 34, 45);
DateTime date2 = new DateTime(2011, 6, 27, 4, 34, 45);

employeeCollection.Rows.Add(1011, "DintinAmam", "Alfki", "Britain", date1);
employeeCollection.Rows.Add(1012, "JohnAmam", "Johanesberg", "China", date2);

string filterString = "Date = #" + date1.ToString() + "#";

employeeCollection.DefaultView.RowFilter = filterString;

return employeeCollection;
}

Строка фильтра - «Дата = # 6/26/2011 4:34:45 AM #»

Output1: enter image description here

2) Данные и фильтрация - не работает

public DataTable GetDataTable()
{
DataTable employeeCollection = new DataTable();
var dt = DateTime.Now;

employeeCollection.Columns.Add("EmployeeID", typeof(int));
employeeCollection.Columns[0].ColumnName = "Employee ID";
employeeCollection.Columns.Add("EmployeeName", typeof(string));
employeeCollection.Columns["EmployeeName"].ColumnName = "Employee Name";
employeeCollection.Columns.Add("CustomerID", typeof(string));
employeeCollection.Columns["CustomerID"].ColumnName = "Customer ID";
employeeCollection.Columns.Add("Country", typeof(string));
employeeCollection.Columns.Add("Date", typeof(DateTime));

DateTime date1 = DateTime.Now.AddDays(1);
DateTime date2 = DateTime.Now.AddDays(2);

employeeCollection.Rows.Add(1011, "DintinAmam", "Alfki", "Britain", date1);
employeeCollection.Rows.Add(1012, "JohnAmam", "Johanesberg", "China", date2);

string filterString = "Date = #" + date1.ToString() + "#";

employeeCollection.DefaultView.RowFilter = filterString;

return employeeCollection;
}

Строка фильтра - «Дата = # 6/27/2018 5:19:17 PM #»

Выход2:

enter image description here

При создании значения DateTime с помощью конструктора фильтра работает нормально, а при использовании DateTime.Now фильтрация не работает.

Может ли кто-нибудь подтвердить мне, почему инициализация значения Date с использованием DateTime.Now.AddDays () не работает для фильтрации?

1 Ответ

0 голосов
/ 26 июня 2018

Фильтр строк для значений даты / времени обрабатывает субсекундные компоненты (миллисекунды ...).

Но формат по умолчанию для даты / времени не включает их.

Ваш фильтр будет работать только тогда, когда date1 и date2 не имеют субсекундных компонентов, как в вашем первом фрагменте кода (этот конструктор DateTime устанавливает их в 0).

Одним из решений является предоставление ToString формата, который включает в себя второстепенные компоненты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...