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

如何阻止表格日期列显示时间?附C#日历选择事件代码及场景

解决GridView日期列显示多余时间的问题

你遇到的这个问题其实很常见——虽然数据库里的字段是date类型,但绑定到GridView后,.NET会把它解析成DateTime类型(默认带00:00:00的时间部分),GridView又会默认渲染完整的DateTime字符串,所以就出现了多余的时间。下面给你几个实用的解决办法:

方法1:直接在GridView列定义中设置格式

这是最直接的方式,如果你愿意手动定义GridView的列(而不是用自动生成列),可以给日期列加上DataFormatString属性:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False">
    <Columns>
        <!-- 其他列保持不变 -->
        <asp:BoundField 
            DataField="Date" 
            HeaderText="日期" 
            DataFormatString="{0:yyyy-MM-dd}" 
            HtmlEncode="False" />
    </Columns>
</asp:GridView>

注意一定要把HtmlEncode设为False,否则格式字符串不会生效,还是会显示完整的DateTime。

方法2:通过RowDataBound事件动态格式化

如果你的GridView是自动生成列的,不想手动改列定义,可以在后台的RowDataBound事件里处理每个数据行的日期单元格:

首先给GridView注册这个事件:

<asp:GridView ID="GridView1" runat="server" OnRowDataBound="GridView1_RowDataBound">
</asp:GridView>

然后在后台添加事件处理代码:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    // 只处理数据行,跳过表头、表尾
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        // 获取当前行的Date字段值
        DataRowView rowView = (DataRowView)e.Row.DataItem;
        DateTime date = (DateTime)rowView["Date"];
        
        // 找到对应的单元格(假设Date是第0列,或者根据实际列索引调整)
        e.Row.Cells[0].Text = date.ToString("yyyy-MM-dd");
        // 也可以用ToShortDateString(),会根据系统区域设置显示格式:
        // e.Row.Cells[0].Text = date.ToShortDateString();
    }
}

方法3:修改数据源的列类型(不推荐)

你也可以在DataView里新增一个格式化后的字符串列来替代原Date列,但这种方式会把日期转成字符串,失去日期类型的可排序等特性,所以一般不建议这么做。比如:

view.Table.Columns.Add("FormattedDate", typeof(string), "Date.ToString('yyyy-MM-dd')");
// 然后绑定GridView的时候用FormattedDate作为数据源字段

你的Calendar1_SelectionChanged代码本身是没问题的,RowFilter的逻辑正确,问题出在GridView的渲染环节,上面的前两种方法都能很好解决这个问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:20:27