Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# gridview C中的排序_C#_Datetime - Fatal编程技术网

C# gridview C中的排序

C# gridview C中的排序,c#,datetime,C#,Datetime,我想根据手机号码、注册日期等不同参数对记录进行排序 我的表格看起来像 输入手机号码后,当我单击搜索时,我会得到以下结果: 现在我想对登记日期的记录进行排序 以下是我对记录进行排序的代码: private void SearchDate() { DataTable rt = GetRecords(); DataView rd = new DataView(rt); string SearchRegdate = null; if

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

我的表格看起来像

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

现在我想对登记日期的记录进行排序

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

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”操作


有什么解决办法吗?

首先,我认为语法是错误的。从你的陈述中可以得出如下结论:

registration_date like <user sort expression> '%...%'
like和筛选器表达式%…%之间可能没有任何内容


此外,列registration_date是一个DateTime-您不能使用like将其与字符串进行比较-这就是错误的含义。您可以添加一个隐藏的计算列,该列包含作为字符串的日期,并对其进行排序。

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

dt.Select("Convert(column1,System.String) like '2013'")
或rd.RowFilter=Convertcolumn1,System.String-like+SearchRegdate

您可以在此处检查完整语法:

您可以尝试替代行筛选器:

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执行其他筛选。

使用Linq:


注册日期的数据类型是什么?您还需要对记录进行排序或筛选吗?数据类型为datetime,是,我要筛选记录。谢谢你,伙计!rd.RowFilter=Convertcolumn1,System.String-like+SearchRegdate;这个很好用。是的,我将列转换为字符串,现在它正在按预期工作。感谢您的帮助:
var rows = (from r in rt.AsEnumerable()
           where SqlFunctions
             .StringConvert(r.Field<DateTime>("registration_date")).Contains("1")
           select r).ToList();
DataTable dt = (aboveQuery).CopyToDataTable();