DataGridView提取日期赋值给DateTimePicker报字符串无法识别为有效DateTime错误如何解决
问题解决办法
问题根源
报错的核心原因是:DataGridView日期单元格的值本身是DateTime类型,你强制调用ToString()后得到的字符串格式受系统区域设置影响,和你传入ParseExact的yyyy-MM-dd格式不匹配,所以解析失败。
最优解决方案
优先不要转字符串解析,直接转换单元格的原始值为DateTime类型即可,完全规避格式适配问题,还能避免空值报错,替换原出错的两行代码即可:
// 先做非空判断避免空值异常 if (dtv_dis1.SelectedRows[0].Cells[1].Value != null && dtv_dis1.SelectedRows[0].Cells[1].Value != DBNull.Value) { // 直接将原始DateTime值赋值,不需要转字符串解析 dtp_date.Value = (DateTime)dtv_dis1.SelectedRows[0].Cells[1].Value; } else { // 空值情况下给DateTimePicker赋默认值,可根据业务需求调整 dtp_date.Value = DateTime.Now; }
备选方案(仅当单元格存储的是字符串类型的日期时使用)
如果确认单元格里存的是字符串格式的日期,就用你实际取到的格式作为ParseExact的匹配规则,注意分钟的格式符是mm不是MM(MM代表月份):
String date = dtv_dis1.SelectedRows[0].Cells[1].Value.ToString(); // 用实际匹配的格式解析 dtp_date.Value = DateTime.ParseExact(date, "dd-MM-yyyy hh:mm:ss t", System.Globalization.CultureInfo.InvariantCulture);
内容的提问来源于stack exchange,提问作者Supayan Das
相关产品推荐
相关产品推荐

