You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GridView单元格日期格式转换求助:从dd/MM/yyyy H:ss:mm转yyyy-MM-dd

解决GridView动态绑定日期格式的问题

别发愁,这种动态自动生成列的场景确实没法直接用ItemTemplate来格式化,我给你几个实用的解决方案,挑适合你的来用:

方法1:在SQL查询中直接格式化日期(最简便)

既然你的数据源是SQL查询结果,那直接在查询语句里把日期转成你要的yyyy-MM-dd格式是最省事的,这样GridView绑定后直接显示格式化好的字符串,不需要额外处理。

以SQL Server为例,你可以用CONVERT函数:

SELECT CONVERT(varchar, StartDate, 23) AS StartDate, OtherColumns...
FROM YourTableName

这里的23是SQL Server内置的格式代码,对应yyyy-MM-dd。如果是MySQL的话,用DATE_FORMAT(StartDate, '%Y-%m-%d') AS StartDate即可。

方法2:利用GridView的RowDataBound事件后台处理

如果不想修改SQL语句,可以在后台代码里通过RowDataBound事件来逐行处理日期格式:

  1. 先在.aspx页面的GridView标签里添加事件绑定:
<asp:GridView ID="GridView1" runat="server" OnRowDataBound="GridView1_RowDataBound">
</asp:GridView>
  1. 然后在后台.cs文件里实现这个事件方法:
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    // 只处理数据行,跳过表头、页脚等行
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        // 从DataItem里获取原始日期数据,比依赖列索引更可靠
        DataRowView rowData = e.Row.DataItem as DataRowView;
        if (rowData != null)
        {
            DateTime startDate = Convert.ToDateTime(rowData["StartDate"]);
            
            // 找到对应列的索引(通过列名匹配,避免列顺序变化出错)
            int targetColumnIndex = ((GridView)sender).Columns
                .Cast<DataControlField>()
                .ToList()
                .FindIndex(col => col.HeaderText.Equals("StartDate", StringComparison.OrdinalIgnoreCase));
            
            if (targetColumnIndex != -1)
            {
                e.Row.Cells[targetColumnIndex].Text = startDate.ToString("yyyy-MM-dd");
            }
        }
    }
}

方法3:在DataBound事件中设置自动生成列的格式

如果你的GridView是通过数据源控件(比如SqlDataSource)绑定的,还可以在DataBound事件里找到对应的日期列,直接设置它的格式:

protected void GridView1_DataBound(object sender, EventArgs e)
{
    foreach (DataControlField column in GridView1.Columns)
    {
        // 判断是否是绑定列,且绑定的字段是StartDate
        if (column is BoundField boundField && boundField.DataField == "StartDate")
        {
            boundField.DataFormatString = "{0:yyyy-MM-dd}";
            boundField.HtmlEncode = false; // 必须设置为false,否则格式不会生效
        }
    }
}

这三个方法都能解决你的问题,优先推荐方法1,操作最简单;如果业务上不能修改SQL,就用方法2,灵活性更高。

内容的提问来源于stack exchange,提问作者Edmund

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:35:19