4

我想根据手机号码等不同参数对记录进行排序。,注册日期

我的表格看起来像在此处输入图像描述

输入手机号后 当我点击搜索时,我得到以下结果:

在此处输入图像描述

现在我想对注册日期的记录进行排序。

这是我对记录进行排序的代码:

private void SearchDate()
    {
        DataTable rt = GetRecords();
        DataView rd = new DataView(rt);
        string SearchRegdate = null;
        if (!String.IsNullOrEmpty(txtdate.Text))
        {
              SearchRegdate = string.Format("{0} '%{1}%'", gvUser.SortExpression, txtdate.Text);

        }
           rd.RowFilter = "registration_date like " + SearchRegdate;
           gvUser.DataSource = rd;
           gvUser.PageSize = 30;
           gvUser.DataBind();
    }

在这里,我收到错误“无法对 System.DateTime 和 System.String 执行 'Like' 操作。”

有什么解决办法??

4

4 回答 4

1

在使用类似之前,您必须将日期转换为字符串:

dt.Select("Convert(column1,System.String) like '2013'")

或 rd.RowFilter = "Convert(column1,System.String) like " + SearchRegdate;

您可以在此处查看完整的语法:语法参考

于 2013-03-01T10:46:01.023 回答
0

首先,我认为语法是错误的。你的陈述会产生如下内容:

registration_date like <user sort expression> '%...%'

like和过滤器表达式之间可能没有任何内容%...%

此外,该列registration_dateDateTime- 您无法将其与stringusing进行比较like- 这就是错误的意思。您可以添加一个隐藏的计算列,其中包含作为字符串的日期并对其进行排序。

于 2013-03-01T10:43:02.893 回答
0

您可以尝试使用LINQ而不是 RowFilter:

DateTime 的简单示例:

初始化:

var table = new DataTable("Dates");
var dateColumn = new DataColumn("Date", typeof (DateTime));
table.Columns.Add(dateColumn);

table.BeginLoadData();
table.LoadDataRow(new object[] {new DateTime(2000, 1, 1)}, true);
table.LoadDataRow(new object[] {new DateTime(2000, 1, 2)}, true);
table.LoadDataRow(new object[] {new DateTime(2001, 1, 1)}, true);
table.LoadDataRow(new object[] {new DateTime(2002, 1, 1)}, true);
table.EndLoadData();

带有搜索日期文本的查询:

var someDateText = "2000";

var dataView = (from row in table.AsEnumerable()
                let dateTime = row.Field<DateTime>(0)
                where dateTime.ToString().Contains(someDateText)
                orderby dateTime
                select row).AsDataView();

之后,您还可以使用创建的 dataView 的 RowFilter 来执行其他过滤器。

于 2013-03-01T10:47:46.347 回答
0

使用Linq

var rows = (from r in rt.AsEnumerable()
           where SqlFunctions
             .StringConvert(r.Field<DateTime>("registration_date")).Contains("1")
           select r).ToList();

或者如果你想要一个数据表

DataTable dt = (aboveQuery).CopyToDataTable();
于 2013-03-01T10:52:03.423 回答