c# - 如何在包含单词和日期的日期列之间过滤datagridview?

时间:2017-01-27 09:02:17

标签: c# date datagridview filter between

我有一个名为DateColumn的列,它存储创建日期,如下所示:

created at 2017-01-20
created at 2017-01-21
created at 2017-01-22
created at 2017-01-23
created at 2017-01-24

如何只获得20到24之间的日期,而该列还包含“created at”字符串?

我尝试了这个并且它有效,但仅适用于主题中没有日期的列:

(dataGridView1.DataSource as DataTable).DefaultView.RowFilter = "DateColumn  >= '" + minDate + "' AND DateColumn <= '" + maxDate + "'";

1 个答案:

答案 0 :(得分:1)

我认为您的问题是“创建时间”在您的列中。现在你必须为此找到解决方法。你最好还是应该考虑是否有必要“创造于”。如果从数据库中选择这些值(在DataTable中),则可以在select中对其进行子串。

例如(Oracle-Style):

SELECT someValue1, someValue2, TO_DATE(SUBSTR(DateColumn, 10, 10), 'YYYY-MM-DD') DateColumn
FROM something

如果您明确需要此文本可能不是这种情况,您应该在DataTable中创建一个仅包含日期的新列。您可以过滤此列:

DataTable yourTable = new DataTable();
//Fill with strange strings like 'created at 2017-01-01'
yourTable.Columns.Add("RealDate");

foreach (DataRow row in yourTable.Rows)
{
   //Instead of substr you can also use regex if you prefer
   row["RealDate"] = Convert.ToDateTime(Substring(row["DateColumn"], 10, 10));
}

在我的两个解决方案之后,您可以轻松过滤DateTime中的新行,如您在问题中所述。