Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.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#_Asp.net_Sql - Fatal编程技术网

C# gridview中排序日期中的问题

C# 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}" /> 从数据库中检索数

gridview中的日期排序工作不正常

字段名:Lossdate 数据类型:nvarchar255

在sql中,数据类型为nvarchar,因为日期字段也有一些格式化的字符串值 像这样的A90317,A00921

<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