3

グリッドビューで列を注文したいのですが、datetime代わりに文字列として注文されているように感じます:

私のコード:

if (SortExpression.ToString() == "TransDate")
{
    if (SortDirection == SortDirection.Ascending)
    {
        gv_Details1.DataSource = TransactionList.OrderBy(t =>  DateTime.Parse(t.TransDate)).ToList<UserTransactionDTO>();
    }
    else
    {
        gv_Details1.DataSource = TransactionList.OrderByDescending(t => DateTime.Parse(t.TransDate)).ToList<UserTransactionDTO>();
    }
}

私のaspx:

   <asp:BoundField DataField="TransDate" HeaderText="Date" SortExpression="TransDate">

結果の一部 ::

23/12/2012 09:51
27/9/2012 11:36
3/10/2012 12:28
2/10/2012 10:51
4

3 に答える 3

3

問題はDateTime.Parselinqソートでの使用であり、文字列には最初と2番目の部分が日または月である可能性がある場合があると思います...最初の部分が一方向に解析するという理由だけで、解析は項目ごとに行われることを覚えておいてください2番目のものが同じ方法で解析されるという意味ではありません。

お住まいの地域のデフォルトはおそらく月初ですが、最初のカップルでは機能しないため、最初の部分が日であることがわかっているため、その形式を使用します。最後の2つの日付の場合、最初の部分は1か月間機能するため、デフォルトに従って最初に月を解析します。またはその逆:)

DateTime.ParseExact次のように使用してみてください。

CultureInfo provider = CultureInfo.InvariantCulture;
string format = "dd/MM/yyyy hh:mm";

gv_Details1.DataSource = TransactionList.
    OrderBy(t =>  DateTime.ParseExact(t.TransDate, format, provider)).
    ToList<UserTransactionDTO>();

うまくいけば、私は正しいフォーマットを選びましたが、それを微調整するだけではありません。

于 2013-02-05T19:24:30.803 に答える
2

結果は私に順序付けられた文字列に見えません...以下は、文字列解析とリストを使用して正しく並べ替えられているものの簡単な例です

static void Main(string[] args)
{
    List<String> datestrings = new List<string>()
    {
        "12/23/2012 09:51",
        "9/27/2012 11:36",
        "10/2/2012 12:28",
        "10/3/2012 10:51"
    };
    List<DateTime> dates = datestrings.Select(a => DateTime.Parse(a)).OrderBy(a => a).ToList();
    foreach (var d in dates)
    {
        Console.WriteLine(d);
    }

    Console.ReadLine();
}

上記は文字列を正しくソートします。

TransactionList.OrderBy(t => Da...一時変数に格納し、データソースを設定する前にデータセットが正しく順序付けられていることを確認することにより、何らかの理由でデータセットを設定した後、グリッドが最初に物事を並べ替えていないことを確認します。

次に、それがあなたの日付の文化の問題であるかどうかを確認します(またはParseExactを使用します)(ただし、現在の順序で送信したものからは何も影響を受けません)。

最後に、私はaspバインディングに精通していませんが、おそらくデータセットにバインドする方法では、次のリンクのように日付を指定する必要があります:http: //forums.asp.net/t/ 1001482.aspx / 1

サイトからの抜粋は次のことを推奨しています。

< asp:boundfield datafield="Your_Date_Column" dataformatstring="{0:MMMM d, yyyy}" htmlencode="false" />
于 2013-02-05T17:37:56.973 に答える
0

SQL だけでそれを行ったとき、グリッド ビューに接続された T-SQL コードに「order by」ステートメントを追加しました。

于 2013-02-05T16:44:33.243 に答える