6

C# で DataView を並べ替えようとしています。DataView Class の Sort メソッドは、日付を文字列として受け取るようです。

出力でこれを取得しています-

5/9/2013 4:56:38 PM
5/8/2013 4:23:06 PM
5/8/2013 1:38:21 PM
5/7/2013 9:55:30 PM
5/7/2013 7:54:45 PM
5/7/2013 7:44:10 PM
5/7/2013 7:44:10 PM
5/7/2013 12:26:38 PM
5/7/2013 1:44:06 PM
5/6/2013 4:08:54 PM
5/6/2013 10:32:49 AM
5/4/2013 7:54:23 PM
5/4/2013 12:57:21 PM
5/3/2013 3:49:03 PM
5/3/2013 3:49:03 PM
5/3/2013 2:06:12 PM
5/3/2013 11:19:34 AM
5/3/2013 11:03:32 AM
5/3/2013 1:58:38 PM
5/2/2013 7:27:55 PM
5/2/2013 7:17:50 PM
5/2/2013 7:06:06 PM
5/2/2013 6:42:37 PM
5/2/2013 6:30:58 PM
5/13/2013 12:49:24 PM

これは私のコードです。

 DataTable dt;  
 DataView dv = dt.DefaultView;
 dv.Sort = "MessageDate desc";
 DataTable sortedDT = dv.ToTable();
 foreach (DataRow row in sortedDT.Rows)
 {
 code to print.
 }

ご覧のとおり、最後の日付である 5/13/2013 は、日付比較の場合は 5/13 > 5/9 のように最下部ではなく最初にあるはずですが、日付比較の場合は 5/13<5/9 です。ストリング。

MessageDate 列は私の宣言では日時ですが、コンパイラはそれを文字列に変換しています。

 public struct Messages
    {
        public string ProfileId { get; set; }
        public string Network { get; set; }
        public string FromId { get; set; }
        public string FromName { get; set; }
        public string FromProfileUrl { get; set; }
        public DateTime MessageDate { get; set; }
        public string Message { get; set; }
        public string FbComment { get; set; }
        public string FbLike { get; set; }
        public string MessageId { get; set; }
        public string Type { get; set; }

    }

なぜこれが起こっているのか、どうすれば同じように回避できるのでしょうか?

4

2 に答える 2

2

DataView は、日付などを文字列型として格納します。したがって、ソートすると、文字列でソートされます。DateTime として並べ替えるには、次のように、データを追加する前に列を DateTime に変換する必要があります。

dt.Columns["日付"].DataType = Type.GetType("System.DateTime");

于 2014-09-04T13:18:18.033 に答える
1

IComparable並べ替えを実装する必要がありますDateTime: http://forums.asp.net/p/1267353/2393006.aspx

または、構造体を変更できる場合は、並べ替え値を追加できます。

public string SortValue
{
    get
    {
        return ((int)((MessageDate - new DateTime(1970, 1, 1)).TotalSeconds)).ToString("D12");
    }
}

これは MessageDate を seconds-since-epoch 値に変換し、辞書順で並べ替えることができます。

于 2013-05-14T09:05:28.810 に答える