我想对不同参数的记录进行排序,例如移动号码,注册日期等
我的表单看起来像
点击搜索后输入移动号码后,我得到以下结果:
现在我想对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'操作。”
任何解决方案??
答案 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_date
是DateTime
- 您无法将其与使用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();