如何将字符串列排序为gridview中的日期时间列

时间:2013-02-05 16:38:14

标签: c# asp.net linq datetime gridview

我想在网格视图中订购一个列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

3 个答案:

答案 0 :(得分:3)

我认为问题是你在linq排序中使用DateTime.Parse而你的字符串有第一和第二部分可能是白天或月份的情况......记住解析是逐项进行的,所以只是因为第一个解析单向并不意味着第二个解析方式相同。

您的区域默认值可能是第一个月,这对第一对夫妇不起作用,因此它知道第一部分是一天,因此它使用该格式。对于最后几个日期,第一部分确实适用于月份,因此它根据默认值首先解析月份。反之亦然:)

尝试使用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>();

希望我选择了正确的格式,但如果不是只是调整它。

答案 1 :(得分: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绑定的速度,但也许你绑定到teh数据集的方式要求你指定它的日期类似于以下链接:http://forums.asp.net/t/1001482.aspx/1

该网站的摘录建议:

< asp:boundfield datafield="Your_Date_Column" dataformatstring="{0:MMMM d, yyyy}" htmlencode="false" />

答案 2 :(得分:0)

当我仅通过SQL执行此操作时,我将“order by”语句添加到附加到网格视图的T-SQL代码中。