我无法在数据网格中过滤日期值。这是我的代码:
DataTable dbdataset;
DataView DV = new DataView(dbdataset);
DV.RowFilter = string.Format("Data LIKE '%{0}%'", textBox1.Text);
dataGridView1.DataSource = DV;
我总是收到这个错误:
Unable to Perform Operation 'Like' on System.DateTime and System.String
有人可以帮助我吗?
答案 0 :(得分:5)
您无法在LIKE
数据类型上使用DateTime
运算符。尝试使用相等的运算符。
DV.RowFilter = string.Format("Data = '{0}'", textBox1.Text);
但是,要小心textBox1.Text
内的内容。它必须可转换为DateTime
数据类型。另请注意DateTime
也有Time
部分,而不只是Date
部分。
或者您可能希望尝试过滤特定日期内的所有行:
DateTime dt = Convert.ToDateTime(textBox1.Text);
DV.RowFilter = string.Format("Data > '{0}' AND Data < '{1}'", dt.AddDays(-1).ToString("yyyyMMdd"), dt.AddDays(1).ToString("yyyyMMdd"));
答案 1 :(得分:1)
显然字段数据来自Datetime类型,你不能在它上面执行Like。您可以使用:
DV.RowFilter = string.Format("Data = '{0}'", textBox1.Text);
您也有=, >=, <=.
另请将字段名称更改为日期!
您可以在LINQ
CultureInfo invC = CultureInfo.InvariantCulture;
var query= from myRow in dataTable.AsEnumerable()
where myRow.Field<DateTime>("Date").ToString(invC).Contains("mm/dd/yyyy")
select myRow;
// the date should be in format months/days/year -> Example 23 January 2014 is 01/23/2014
DataTable newTable= query.CopyToDataTable<DataRow>();
答案 2 :(得分:0)
DV.RowFilter = string.Format("Data >= '{0}'", textBox1.Text);
如果您的列在数据库中是datetime
,则会起作用。这将返回指定日期或更新的记录。如果您要查找早于该日期的记录,请将标记切换为<
。