我有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
类型。
过滤器声明有什么问题?
感谢您的时间。
答案 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...
}