在gridview C#中排序

时间:2013-03-01 10:35:15

标签: c# datetime

我想对不同参数的记录进行排序,例如移动号码注册日期

我的表单看起来像enter image description here

点击搜索后输入移动号码后,我得到以下结果:

enter image description here

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

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

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 个答案:

答案 0 :(得分:1)

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

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

或rd.RowFilter =“转换(column1,System.String),如”+ SearchRegdate;

您可以在此处查看完整语法:syntax reference

答案 1 :(得分:0)

首先,我认为语法错误。你的判断会产生什么样的结果:

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

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

此外,列registration_dateDateTime - 您无法将其与使用string的{​​{1}}进行比较 - 这就是错误所说的内容。您可以添加一个隐藏的计算列,其中包含日期作为字符串并对其进行排序。

答案 2 :(得分: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来执行其他过滤器。

答案 3 :(得分: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();