自定义格式整数作为 DataGrid 中的日期

发布于 2024-10-15 09:26:27 字数 251 浏览 2 评论 0原文

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

目前该字段的绑定方式如下:

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

I have an integer field in my database that contains a date value in the form yyyyMMdd. Is it possible to parse this as a date in the form dd/MM/yyyy as bound to a datagrid?

Currently the field is bound like this:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

愿与i 2024-10-22 09:26:27

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

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

Why don't you use Date for dates in database ?
You can convert int to datetime using following sample code:

var sdate = intdate.ToString();
var date = DateTime.ParseExact(sdate, "yyy/MM/dd", CultureInfo.InvariantCulture);
念三年u 2024-10-22 09:26:27

感谢 gor 指导我完成这一切。
他的回答本身并不是完整的解决方案,但经过一些来回评论后,我最终得到了一个很好的解决方案。

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

asp:datagrid 控件的 集合中:

<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
}

Thanks to gor for guiding me through this.
His answer in itself was not the entire solution, but after some commenting back and forth, I ended up with a good solution.

Instead of using a asp:boundcolumn in the grid, I had to use asp:templatecolumn and display it through a binding expression (like gor explained in his comment, although I think he based his answer on using the asp:listview control, while I use the old asp:datagrid control).

In the <columns> collection of the asp:datagrid control:

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

In the code-behind:

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
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文