none
[問題]如何在ShowGroups=true時排序ListView? RRS feed

  • 問題

  • 環境屬性:VS 2005 SP1 on Wind2003 SP2, Windows Form Project

     

    小弟在Form上面有一個ListView,程式會不斷的增加資料(in BackgroundWorker),而ShowGroups預設為true,每一個ListViewItem都會屬於某一個Group(隨程式執行時產生)。

    現在有一個問題,就是小弟想等所有的資料都寫入後(BackgroundWorker_Completed),再開始排序。

    程式碼區塊

    1 this.lvEvents.ListViewItemSorter = new ListViewItemComparer();

    2
    3 //讓ListView顯示台序後的資料(VS2005的Bug??)
    4 this.lvEvents.ShowGroups = !this.lvEvents.ShowGroups;
    5 this.lvEvents.ShowGroups = !this.lvEvents.ShowGroups;

    可是如果只有第一行,雖然trace時顯示ListView內的資料已排序,但畫面上仍舊是未排序的資料。

    必須在加上第4, 5行,才會正常顯示。順序、數量缺一不可。

     

    有比較正統的作法嗎?感覺這樣怪怪的...

    2007年11月2日 上午 03:08

所有回覆

  • HI,

     

    this.lvEvents.ListViewItemSorter = new ListViewItemComparer();這一行程式碼只是設定好Comparer而已, 要執行排序可以呼叫ListView控制項的Sort方法:

     

    this.lvEvents.Sort();

     

    tihs

     

    2007年11月2日 上午 03:24
  •  

    謝謝回覆。

     

    我原本是在程式一開始就設好Comparer,但是如此一來會導致在新增item時排序而浪費許多時間。

    而且我在debug時,設好Comparer後lvEvents.Items即已排序。只是設定了Gorup後,畫面上的Item沒有照著memory中的順序顯示。

    2007年11月13日 上午 05:20
  • HI,

     

    那您有在設定好Group屬性之後再排序一次嗎?

     

    tihs

    2007年11月14日 上午 03:42
  • 原來沒有。我現在已經採用您的方法,是正確的,非常感謝。

     

    我只是在想為什麼設定ListViewItemSorter兩次後它會自動排序。

    而且MSDN Library中ListViewItemSorter的範例內也沒提到Sort方法,

    只提到設定ListViewItemSorter後就會排序。

    2007年11月14日 上午 07:59
  • HI,

     

    應該是這樣:

     

    1) 設定ListViewItemSorter只是指定比較集合內容的方法

    2) 呼叫Sort方法會進行排序

     

    tihs

    2007年11月15日 上午 01:38
  • 結果我搞錯了....如果設定Sorter後執行Sort(),它並未排序。

    因為前面的資料剛好看起來像是排序過的

     

    結果還是要用發文時的那個辦法才行...
    2007年11月16日 上午 05:27