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.Parse在 linq 排序中的使用,并且您的字符串存在第一部分和第二部分可能是日期或月份的情况......请记住解析是逐项进行的,所以只是因为第一个解析方式不这并不意味着第二个将以相同的方式解析。

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

尝试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 回答