过滤DataTable的DateTime列导致FormatException
本文关键字:FormatException DateTime DataTable 过滤 | 更新日期: 2023-09-27 17:50:44
我有一个DataTable dt
绑定到一个DataGridView
。我一直在使用标准查询语法在运行时过滤这个网格中的数据。但是,对于这个DataTable
中已知的DateTime
列,查询
DataRow[] rowArray = dt.Select("DOB >= #01/01/97# AND DOB <= #31/01/97#");
但是这会抛出一个FormatException,消息是:
字符串未被识别为有效的日期时间。
我试过把上面的内容改成
DataRow[] rowArray = dt.Select("DOB >= #01/01/1997# AND DOB <= #31/01/1997#");
但这给出了相同的错误。从MSDN看来,我过滤正确。我可以确认DataTable
列'DOB'确实是DateTime
类型。
过滤器语句有什么问题?
感谢您的宝贵时间。
我唯一能想到的就是区域设置。这似乎你使用GB区域设置。试试这个。
CultureInfo myCultureInfo = new CultureInfo("en-gb");
dt.Locale = myCultureInfo;
DataRow[] rowArray = dt.Select("DOB >= #01/01/1997# AND DOB <= #31/01/1997#");
就像这样将两个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...
}