2015-02-24 92 views
0

我有一个DataGridView和一个搜索框,我可以搜索某个列中的不同日期。现在,因为该日期作为格式化字符串,他会给我错了顺序:DataGridView按错误顺序排序日期

我在20键入并获得:

二〇一四年十月二十日,
2014年9月22日,
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() 

是抓住从文本框输入要搜索的字符串的函数。我尝试转换并转换为日期时间等,但仍然以错误的顺序显示。谁能帮忙?

+0

什么是你正在使用订购您的结果集列的数据类型?请张贴一些原始数据。 – Paolo 2015-02-24 09:25:47

+0

列的数据类型是“日期”。要搜索它,我将它转换为varchar(见上面)。但是如何让他按照正确的顺序显示日期? – MKX2015 2015-02-24 09:28:21

回答

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); 
+0

哇!这似乎有帮助。非常感谢你! – MKX2015 2015-02-24 10:30:19

1

在您的“form1.getFromDate()。Trim()”末尾使用'> ='use'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); 
+1

我会在搜索具体日期时使用LIKE。我必须将文本框从“”和“直到”,所以我必须设置一个范围 – MKX2015 2015-02-24 09:58:42

+0

现在我创建了示例表后,得出了与Paolo相同的答案。 – 2015-02-24 13:16:00