DataGridView(DGV)日期格式错乱问题求助
DataGridView(DGV)日期格式错乱问题求助
嘿,我来帮你搞定这个DGV日期格式的问题!
你遇到的奇怪格式(202,231,12)其实是因为用错了MySQL的函数——FORMAT()在MySQL里是用来格式化数字的(比如把123456变成123,456),你把日期值传给它,它会把日期当成数字解析,自然就出现了这种乱码一样的逗号分隔格式。
给你两个靠谱的解决办法:
方法1:用MySQL的日期格式化函数修正查询
把SQL里的FORMAT()换成专门处理日期的DATE_FORMAT()函数,并且指定你想要的格式(%m/%d/%Y对应MM/DD/YYYY),修正后的完整代码如下:
cm = new MySqlCommand("SELECT OrderID, DATE_FORMAT(Orderdate, '%m/%d/%Y') as OrderDate, CustomerID, Username, ProductID, Qty, Price, TotalAmount FROM ordertb WHERE OrderDate LIKE'%" + txtSearch.Text+"%'", con);
这样查询出来的OrderDate就是你想要的12/31/2022格式,不会带时间,也不会乱码。
方法2:直接在DGV里设置列格式(更推荐)
如果你不想修改SQL查询,也可以直接在C#代码里设置DGV列的显示格式,这样即使查询返回的是带时间的日期类型,也能自动隐藏时间部分:
// 假设你的DGV名为dataGridView1,OrderDate列是日期类型 dataGridView1.Columns["OrderDate"].DefaultCellStyle.Format = "MM/dd/yyyy";
这种方法更好,因为它保留了日期的原始数据类型,后续如果要对日期做排序、筛选等操作会更方便,不会因为变成字符串而出问题。
另外提醒一下:你的SQL语句里直接拼接了txtSearch.Text,这存在SQL注入风险,建议改用参数化查询,比如:
cm = new MySqlCommand("SELECT OrderID, DATE_FORMAT(Orderdate, '%m/%d/%Y') as OrderDate, CustomerID, Username, ProductID, Qty, Price, TotalAmount FROM ordertb WHERE OrderDate LIKE @searchText", con); cm.Parameters.AddWithValue("@searchText", "%" + txtSearch.Text + "%");
这样更安全哦!
备注:内容来源于stack exchange,提问作者xeyon
相关产品推荐
相关产品推荐

