2015-02-24 117 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