如何在DataGridView中仅加载显示日期、去除默认附带的时间
解决方案
你可以从两个层面实现日期字段不带时间输出,按需选择即可:
方案1:SQL查询层面直接截断时间(推荐)
SQL Server 中可以直接用CAST或者CONVERT函数将datetime/datetime2类型的字段转成DATE类型,自带去掉时间部分的效果,修改你的查询语句即可:
// 仅修改query部分即可 string query = @"select InvoiceID,cName,CAST(datecreated AS DATE) as datecreated,addedby,Status from CreateTransmital where Status = 'PENDING' GROUP BY InvoiceID,cName,CAST(datecreated AS DATE),addedby,Status";
注意:GROUP BY 子句里的
datecreated也要同步改成CAST(datecreated AS DATE),否则分组规则还是按带时间的原始值计算,会出现同日期不同时间的行被分成多条的问题。
另外你现有代码有个隐藏问题:xdapter.Fill(xlist, "CreateTransmital")只往DataSet里插入了1张名为CreateTransmital的表,下标是0而不是1,后续绑定取xlist.Tables["CreateTransmital"]或者xlist.Tables[0]更稳妥,避免索引越界报错。
方案2:前端DataGridView层面格式化显示
如果不想修改SQL逻辑,直接给日期列设置显示格式即可,在数据绑定完成后加一行代码:
dataGridView1.DataSource = xlist.Tables[0]; // 给datecreated列设置仅显示日期 dataGridView1.Columns["datecreated"].DefaultCellStyle.Format = "yyyy-MM-dd";
这个方案只是修改显示效果,内存里的日期值还是带时间的,如果你后续要拿这个字段做计算或者传参,推荐用方案1。
内容的提问来源于stack exchange,提问作者Jade Templo
相关产品推荐
相关产品推荐

