如何在datagrid中过滤日期值

时间:2014-12-15 20:07:54

标签: c# datagrid

我无法在数据网格中过滤日期值。这是我的代码:

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

有人可以帮助我吗?

3 个答案:

答案 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,则会起作用。这将返回指定日期或更新的记录。如果您要查找早于该日期的记录,请将标记切换为<