过滤DataTable的DateTime列导致FormatException

时间:2014-03-17 16:58:17

标签: c# winforms datatable filtering

我有DataTable dt绑定到DataGridView。我一直在使用标准查询语法在运行时过滤此网格中的数据。但是,对于此DateTime查询中的已知DataTable

DataRow[] rowArray = dt.Select("DOB >= #01/01/97# AND DOB <= #31/01/97#");

但是这会抛出一个带有消息的FormatException:

  

字符串未被识别为有效的DateTime。

我已尝试将上述内容更改为

DataRow[] rowArray = dt.Select("DOB >= #01/01/1997# AND DOB <= #31/01/1997#");

但这也给出了同样的错误。来自MSDN,我似乎正在正确过滤。我可以确认DataTable列&#39; DOB&#39;确实是DateTime类型。

过滤器声明有什么问题?

感谢您的时间。

2 个答案:

答案 0 :(得分:1)

我唯一能想到的是Locale。这似乎你使用GB Locale。试试这个。

CultureInfo myCultureInfo = new CultureInfo("en-gb");
dt.Locale = myCultureInfo;
DataRow[] rowArray = dt.Select("DOB >= #01/01/1997# AND DOB <= #31/01/1997#");

答案 1 :(得分:1)

只需将两个DateTime变量传递到Select语句中,如下所示:(根据您在文本框中输入日期的注释,我还添加了一些数据验证)

DateTime startDate;
DateTime endDate;

var isValidStartDate = DateTime.TryParse(txtStartDate.Text, out startDate);
var isValidEndDate = DateTime.TryParse(txtEndDate.Text, out endDate);

if (isValidStartDate && isValidEndDate)
{
    var rowArray = dt.Select(
        string.Format("DOB >= #{0}# AND DOB <= #{1}#", startDate, endDate));

    // do something with rowArray
}
else
{
    // uh-oh...
}