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();