DataGridView日期时间列强制显示完整日期时间的实现求助
DataGridView日期时间列强制显示完整日期时间的实现求助
Hi 大家好,我现在遇到一个DataGridView显示的小问题,想请教下各位大佬:我把日期时间数据绑定到DataGridView的列里,正常情况下显示都没问题,但一旦时间是午夜0点的时候,单元格就只显示日期部分,不显示时间了。我希望不管时间是几点,都强制显示完整的日期和时间格式。
以下是我当前的实现代码:
// 定义用于填充DataGridView的SQL查询语句 string str_sql = "select title as Title, start as Start, end as End, " + "customer.customerName as Customer, " + "user.userName as Consultant, appointmentId as ID " + "from appointment as appt " + "left join customer on customer.customerId = appt.customerId " + "left join user on user.userId = appt.userId " + "order by start;"; // 将SQL命令与活跃的MySQL连接关联 MySqlCommand cmd = new MySqlCommand(str_sql, mysql.Conn); // 创建用于存储查询结果的数据表 DataTable dt_appointments = new("Appointments"); // 用查询结果填充数据表 dt_appointments.Load(cmd.ExecuteReader()); // 遍历数据表的每一行,将UTC时间转换为用户本地时间 foreach (DataRow dr in dt_appointments.Rows) { dr["Start"] = dr["Start"].As<DateTime>().ToLocalTime(); dr["End"] = dr["End"].As<DateTime>().ToLocalTime(); } // 将数据表设置为DataGridView的数据源 dgv_appointments.DataSource = dt_appointments;
针对这个问题,有个很直接的解决办法:给对应的DataGridView列手动指定固定的日期时间显示格式,就能强制它不管时间是几点都展示完整内容。
你可以在绑定数据源之后,添加这段代码:
// 给Start列设置完整日期时间格式 if (dgv_appointments.Columns["Start"] is DataGridViewTextBoxColumn startColumn) { // 这里用自定义格式"yyyy-MM-dd HH:mm:ss",也可以用预定义格式符"G"(会跟随系统区域设置显示完整格式) startColumn.DefaultCellStyle.Format = "yyyy-MM-dd HH:mm:ss"; } // 给End列设置同样的格式 if (dgv_appointments.Columns["End"] is DataGridViewTextBoxColumn endColumn) { endColumn.DefaultCellStyle.Format = "yyyy-MM-dd HH:mm:ss"; }
为什么会出现只显示日期的情况?因为DataGridView默认会根据DateTime的值自动优化显示格式:如果时间部分是午夜00:00:00,它就会自动只显示日期。手动指定格式后,就会强制按照你设定的规则展示完整的日期和时间了。
另外提醒一下,尽量不要把DateTime转成字符串存到DataTable里(虽然也能实现显示),保持DateTime类型的话,后续对数据进行排序、筛选或者其他操作会更方便。
希望这个方案能帮到你,有其他问题随时交流~
内容来源于stack exchange
相关产品推荐
相关产品推荐

