C# gridview中排序日期中的问题
gridview中的日期排序工作不正常 字段名:Lossdate 数据类型:nvarchar255 在sql中,数据类型为nvarchar,因为日期字段也有一些格式化的字符串值 像这样的A90317,A00921C# gridview中排序日期中的问题,c#,asp.net,sql,C#,Asp.net,Sql,gridview中的日期排序工作不正常 字段名:Lossdate 数据类型:nvarchar255 在sql中,数据类型为nvarchar,因为日期字段也有一些格式化的字符串值 像这样的A90317,A00921 <asp:BoundField DataField="LossDate" HeaderText="Loss Date" SortExpression="LossDate" dataformatstring="{0:MM/dd/yyyy}" /> 从数据库中检索数
<asp:BoundField DataField="LossDate" HeaderText="Loss Date" SortExpression="LossDate"
dataformatstring="{0:MM/dd/yyyy}" />
从数据库中检索数据时,我将数据转换为日期格式,并将其绑定到网格中
SELECT name,location,convert(date,lossdate, 101) as LossDate from valuation
我的预期结果是这样的
NULL
NULL
NULL
A90118
A90317
A00921
2004-05-27
2004-10-26
2010-07-14
2010-10-05
2011-04-07
空值应该放在第一位
格式化字符串日期格式排在第二位
正确的日期格式应该以排序的方式出现
在gridview中,lossdate是这样的
<asp:BoundField DataField="LossDate" HeaderText="Loss Date" SortExpression="LossDate"
dataformatstring="{0:MM/dd/yyyy}" />
请帮我解决这个问题如果您不想在前端编码,可以尝试下面的查询
var temp = table.AsEnumerable()
.OrderBy(x => x.Field<string>("LossDate") !=null)
.ThenByDescending(p => !DateTime.TryParse(p.Field<string>("LossDate"), out dt))
.ThenBy(x => x.Field<string>("LossDate"));
var result =temp.AsDataView().ToTable();
请尝试使用Order By子句。您的问题是应该是日期的字段的双重用法,请首先尝试修复该字段。否则,它被正确地排序为字符串,其中数字位于字母之前。如果您不喜欢这样,您将不得不编写自己的排序。另外,除非您实际存储unicode,否则不要使用nvarchar数据类型,并适当调整列的大小,从您提供的数据来看,255看起来有点大。订单也没有给出预期的结果,但我不能使用日期数据类型,因为它有字符串值。我尝试删除强制转换查询,排序也不适合字符串类型。它没有给出预期的结果
LossDate
null
null
null
A00921
A90118
A90317
27/05/2004 12:00:00 AM
27/06/2005 12:00:00 AM
27/06/2009 12:00:00 AM
select name,location,Lossdate
from (select top (select COUNT(*)
from valuation
where ISDATE(Lossdate) = 0) name,location,Lossdate
from valuation
Where ISDATE(Lossdate) = 0
order by Lossdate) T1
union all
select name,location,Lossdate
from (select top (select COUNT(*)
from valuation
where ISDATE(Lossdate) <> 0) name,location,Lossdate
from valuation
Where ISDATE(Lossdate) <> 0
order by convert(date,Lossdate, 120)) T2