2

グリッドビューでの日付の並べ替えが正しく機能していません。

フィールド名: Lossdate データタイプ: nvarchar(255)

SQL では、日付フィールドにもいくつかのフォーマットされた文字列値があるため、データ型は nvarchar です (例: A90317,A00921 のように)

データベースからデータを取得する際に、データを日付形式としてキャストし、グリッドにバインドしています。

  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

null最初に来る必要があり、

フォーマットされた文字列の日付フォーマットが 2 番目に来ます。

次に正しい日付形式がソートされます

グリッドビューでは、損失日は次のようになります

<asp:BoundField DataField="LossDate" HeaderText="Loss Date" SortExpression="LossDate" 
   dataformatstring="{0:MM/dd/yyyy}"  />

これを解決するのを手伝ってください

4

2 に答える 2

1

Queryコーディングを避けたい場合は、以下を試すことができますFront-End

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
于 2013-07-10T07:27:20.550 に答える
0
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();

上記で girdview の DataSource として設定

サンプル :

DataTable table = new DataTable();
table.Columns.Add("LossDate", typeof(string));
table.Rows.Add(new DateTime(2004, 05, 27));
table.Rows.Add(DBNull.Value);
table.Rows.Add("A90317");
table.Rows.Add(new DateTime(2009, 06, 27));
table.Rows.Add("A90118");
table.Rows.Add(DBNull.Value);
table.Rows.Add("A00921");
table.Rows.Add(DBNull.Value);
table.Rows.Add(new DateTime(2005, 06, 27));
DateTime dt;
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();

結果 :

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 
于 2013-07-10T07:01:04.077 に答える