DataGridView 以错误的顺序对日期进行排序

DataGridView sorts dates in wrong order

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

我输入 20 并得到:

2014 年 10 月 20 日,
2014 年 9 月 22 日,
24.11.2014

等等。我在这里阅读了另一个关于这个问题的帖子,但解决方案对我没有帮助。我的 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()

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

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

使用 '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);

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

我反对通过字符串连接来构建 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);