SQL日期数据在C# WinForm中复制到TextBox带时间的问题排查
问题原因与解决方案
核心原因
SQL Server的DATE类型在.NET中会被映射为DateTime结构——这个结构本身默认包含时间分量,哪怕数据库里没有存储时间,.NET也会自动填充00:00:00的默认时间值。
你的GridView显示正常,是因为DataGridViewColumn默认会对绑定的DATE类型数据做自动格式化,只渲染日期部分;但在SelectionChanged事件中直接将单元格值赋值给TextBox时,调用的是DateTime的默认ToString()方法,该方法会输出完整的日期+时间格式,所以出现了多余的时间信息。
解决方案
- 直接格式化赋值:获取单元格的
DateTime值后,显式指定格式化字符串输出:
// 替换为你的日期列名和TextBox控件名 DateTime dateValue = (DateTime)dataGridView1.SelectedRows[0].Cells["YourDateColumn"].Value; yourDateTextBox.Text = dateValue.ToString("dd/MM/yyyy");
注意:用大写MM表示月份,小写mm代表分钟,不要混淆。
- 通过数据绑定设置格式化:如果TextBox是绑定数据源的,可直接设置绑定的
FormatString:
yourDateTextBox.DataBindings.Add( "Text", yourDataSource, "YourDateColumn", true, DataSourceUpdateMode.OnPropertyChanged, "", "dd/MM/yyyy" );
- 统一控制GridView列格式化(可选):若需要在代码层面统一日期显示规则,可提前给GridView的日期列设置样式:
dataGridView1.Columns["YourDateColumn"].DefaultCellStyle.Format = "dd/MM/yyyy";
内容的提问来源于stack exchange,提问作者Mohamed Rani El Rahaimy
相关产品推荐
相关产品推荐

