【问题标题】:DataGridView sorts dates in wrong orderDataGridView 以错误的顺序对日期进行排序
【发布时间】:2015-04-25 20:25:42
【问题描述】:

我有一个 DataGridView 和一个搜索框,我可以在其中搜索特定列中的不同日期。现在由于日期格式为字符串,他会给我错误的顺序:

我输入 20 得到:

2014 年 10 月 20 日,
22.09.2014,
2014 年 11 月 24 日

等等。我在这里阅读了有关此问题的另一个线程,但解决方案对我没有帮助。我的 SQL 语句如下所示:

 DataTable datTable = new DataTable();

 sqlCmd = new SqlCommand("SELECT ["+form1.timeBox.Text+ "] FROM [" + form1.getTableName() + "] WHERE convert(varchar(10),[" + form1.getTimeCol() + "],104) >= '" + form1.getFromDate().Trim() + "' ORDER BY convert(varchar(10),[" + form1.getTimeCol() + "],104) ASC", connection);

   sqlDatAdapter = new SqlDataAdapter(sqlCmd.CommandText, connection);

            sqlDatAdapter.Fill(datTable);

            form1.setDataGrid = datTable;

form1.getFromDate()

是从文本框中获取输入的字符串以进行搜索的函数。我试图转换并转换为日期时间等等,但它仍然以错误的顺序显示。有人可以帮忙吗?

【问题讨论】:

  • 您用来排序结果集的列的数据类型是什么?请发布一些原始数据。
  • 列的数据类型是“日期”。为了搜索它,我将它转换为 varchar(见上文)。但是如何让他以正确的顺序显示日期呢?

标签: sql winforms date datagridview


【解决方案1】:

您按格式化列排序;没有必要这样做,这就是造成您的问题的部分。

我反对字符串连接来构建sql命令,但你的代码应该重写如下:

sqlCmd = new SqlCommand("SELECT ["+form1.timeBox.Text+ "] FROM [" + form1.getTableName() + "] WHERE convert(varchar(10),[" + form1.getTimeCol() + "],104) >= '" + form1.getFromDate().Trim() + "' ORDER BY " + form1.getTimeCol() + " ASC", connection);

【讨论】:

  • 哇!这似乎有帮助。非常感谢!
【解决方案2】:

不要使用“>=”,而是在“form1.getFromDate().Trim()”的末尾使用带有“%”字符的“Like”运算符,这将为您提供所需的结果。

使用“喜欢”,您的查询将如下所示:

sqlCmd = new SqlCommand("SELECT ["+form1.timeBox.Text+ "] FROM [" + form1.getTableName() + "] WHERE convert(varchar(10),[" + form1.getTimeCol() + "],104) Like '" + form1.getFromDate().Trim() + "%' ORDER BY convert(varchar(10),[" + form1.getTimeCol() + "],104) ASC", connection);

【讨论】:

  • 当我搜索具体日期时,我会使用 LIKE。我必须将文本框“从”和“直到”,所以我必须设置一个范围
  • 在创建示例表之后,我得到了与 Paolo 相同的答案。
猜你喜欢
  • 2015-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-26
  • 1970-01-01
  • 2019-07-07
相关资源
最近更新 更多