如何阻止表格日期列显示时间?附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
相关产品推荐
相关产品推荐

