none
[C#_DataGridView_Sort] RRS feed

  • 問題

  • 各位前輩好:

    小妹用Access 設一個資料庫

    用C#讀取資料做計算,

    將計算結果存到DataGridView的 dataGridView1.Row[i].Cell[1] 連同原本資料庫內容一起顯示(i = 0~4)

    最後,我使用裡面一個排序的功能↓

    dataGridView1.Sort(dataGridView1.Columns[1], System.ComponentModel.ListSortDirection.Descending);

    做排序~

    但我發現一個問題:

    這個排序功能會 忽略 負值

    也就是 如果

    dataGridView1.Row[i].Cell[1] (排序前)的值依序為 2.4, -2.8, -1, 0.9, 0.4

    (其中 i = 0~4)

    由大到小排序應該是 2.4 > 0.9 > 0.4 > -1 > -2.8

    但使用

    dataGridView1.Sort(dataGridView1.Columns[1], System.ComponentModel.ListSortDirection.Descending);

    排序結果卻是  -2.8 > 2.4 > -1 > 0.9 > 0.4

    看起來就是忽略負號去做排序

    不之前輩們有沒有相關經驗可以分享

    我自己有試過加一個 if 條件 讓他先排正值( > 0 ), 再排負值( < 0 )

    但結果還是一樣...

    小妹是自己翻工具書學寫程式的, 還有很多概念需要前輩幫忙指導 

    謝謝

    2012年6月3日 上午 01:09

解答

所有回覆

  • 您好,

    請試一下以下的方式,謝謝!

    how to sort string as number in datagridview in winforms

    Datagridview sort number problem


    以上說明若有錯誤請指教,謝謝。
    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2012年6月3日 上午 02:05
  • 或許你可以參考這篇討論中利用修改Column資料型態的方式,看看能不能依照正確的數值排序。

    http://social.msdn.microsoft.com/Forums/en-US/adodotnetdataset/thread/b3a9a4e5-98c6-4eb9-9a2c-a3702240bae8


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/

    2012年6月3日 上午 05:40
  • Hi vava823:

    請問你這個問題解決了嗎? 請記得回覆後續處理情況, 謝謝.


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2012年6月13日 下午 01:28
    版主
  • Hi vava823:

    請問你這個問題解決了嗎? 請記得回覆後續處理情況, 謝謝.


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    好的! 謝謝提醒

    還是沒有解決~仍舊排序有問題

    後來我嘗試將所有計算出來的數字都加上100後再做排序

    但發現~結果還是讓人失望!

    比如說有一組數 -5, 4, -3, 3, -4, 5

    加上100後

    95, 104, 103, 97, 96, 105

    排序結果為

    95, 96, 97, 105, 104, 103

    變成先排序原先為負值的, 在排序原先為正值的

    2012年6月13日 下午 01:55
  • 你有試過用自訂排序嗎? 就是實作 IComparer .

    [DataGridView.Sort 方法 (IComparer)]


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2012年6月13日 下午 02:20
    版主
  • 您好,

    "排序結果卻是  -2.8 > 2.4 > -1 > 0.9 > 0.4" 
    看起來就是把數字當字串排序, 所以以上各前輩的回覆的數種方法應該都能達到您的需求才對啊.
    例如 VB 的寫法: 

        Private Sub DataGridView1_SortCompare(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewSortCompareEventArgs) Handles DataGridView1.SortCompare
            e.SortResult = Convert.ToDouble(e.CellValue1).CompareTo(Convert.ToDouble(e.CellValue2))
            e.Handled = True
        End Sub

    這樣在呼叫 dataGridView1.Sort 就會當成數值排序.
    不好意思, 我不懂 C#, 請參閱以上前輩提供的連結.

    Ader

    2012年6月14日 上午 04:42