c# - 如何过滤包含单词和日期的日期列之间的datagridview?
Posted
技术标签:
【中文标题】c# - 如何过滤包含单词和日期的日期列之间的datagridview?【英文标题】:c# - How to filter datagridview between dates column that contain words and date? 【发布时间】:2017-01-27 09:02:16 【问题描述】:我有一个名为 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
当列还包含“created at”字符串时,如何仅获取 20 到 24 之间的日期?
我试过了,但它只在主题中只有日期的列上有效:
(dataGridView1.DataSource as DataTable).DefaultView.RowFilter = "DateColumn >= '" + minDate + "' AND DateColumn <= '" + maxDate + "'";
【问题讨论】:
你的DataTable是否来自数据库? 您的 DateColumn 类型是 varchar,minDate 类型是 Datetime? 在 DateTime 值和 varchar 列之间无法进行直接比较。您需要想办法从列中提取日期,然后与 DateTime 值进行比较。 minDate 和 maxDate 来自 datetimepicker,是的 DateColumn 类型在我的 mysql 数据库中是 varchar。 我建议您在获取数据的 SQL 查询中将该列的内容提取到新列中。这样你就可以拥有可以过滤或排序的 DateTime 列 【参考方案1】:我认为您的问题是“创建于”在您的专栏中。现在您必须为此找到解决方法。您最好考虑是否有必要“创建于”。如果您从数据库中选择这些值(在您的 DataTable 中),您可以在您的选择中对其进行子串化。
例如(Oracle 风格):
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 的新行,正如您在问题中提到的那样。
【讨论】:
以上是关于c# - 如何过滤包含单词和日期的日期列之间的datagridview?的主要内容,如果未能解决你的问题,请参考以下文章