【问题标题】:Custom format integer as date in DataGrid自定义格式整数作为 DataGrid 中的日期
【发布时间】:2011-06-19 05:04:23
【问题描述】:

我的数据库中有一个整数字段,其中包含yyyyMMdd 形式的日期值。是否可以将其解析为绑定到数据网格的 dd/MM/yyyy 形式的日期?

目前该字段是这样绑定的:

<asp:boundcolumn datafield="access_date" headertext="Last logged on"></asp:boundcolumn>

【问题讨论】:

    标签: asp.net date datagrid integer custom-formatting


    【解决方案1】:

    为什么不使用 Date 作为数据库中的日期? 您可以使用以下示例代码将 int 转换为日期时间:

    var sdate = intdate.ToString();
    var date = DateTime.ParseExact(sdate, "yyy/MM/dd", CultureInfo.InvariantCulture);
    

    【讨论】:

    • 第二行应该是:var date = DateTime.ParseExact(sdate, "dd/MM/yyyy", CultureInfo.InvariantCulture);
    • @anothershrubery 其实应该是DateTime.ParseExact(sdate, "yyy/MM/dd", CultureInfo.InvariantCulture);
    • 因为数据模型是固定在现有环境中的,我对它没有影响。
    • 这不可能直接作为某种格式说明符在asp:BoundColumn 元素上使用DataFormatString 吗?您的解决方案要求我在 DataBound 事件或其他内容中执行此操作。我真的想知道我是否可以避免这种情况......
    • 我认为不可能。但是,您可以在您的 aspx 页面上定义转换函数并绑定到它。
    【解决方案2】:

    感谢 gor 指导我完成此任务。 他的回答本身并不是完整的解决方案,但经过反复评论,我最终得到了一个很好的解决方案。

    我不得不在网格中使用asp:boundcolumn,而不是使用asp:templatecolumn 并通过绑定表达式显示它(就像他的评论中解释的gor,尽管我认为他基于他的回答关于使用asp:listview 控件,而我使用旧的asp:datagrid 控件)。

    asp:datagrid控件的&lt;columns&gt;集合中:

    <asp:TemplateColumn headertext="Last logged on" >
    <ItemTemplate><%#DateStringFromInt(Eval("access_date"))%></ItemTemplate>
    </asp:TemplateColumn>
    

    在代码隐藏中:

    protected string DateStringFromInt(object value)
    {
        DateTime date;
        if (DateTime.TryParseExact(value.ToString(), "yyyyMMdd", 
            CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal, 
            out date))
        {
            return date.ToString("dd/MM/yyyy");
        }
        return value.ToString(); //Return original if not expected format
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-17
      • 2021-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-10
      相关资源
      最近更新 更多