全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3644
推到 Plurk!
推到 Facebook!

如何排序 ListView 元件內指定的 Column

答題得分者是:ccchen
yamigo
一般會員


發表:19
回覆:41
積分:12
註冊:2002-12-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-12-11 21:54:50 IP:61.70.xxx.xxx 未訂閱
如題~如何排序 ListView 元件內指定的 Column .. 假設有一個 ListView 元件,內有 5 個 Columns.. 請問我如何排序指定的 Column .. 例如我要針對第 2 或第 4 個做升降冪排序~~ 小弟在 ColumnClick Event 裏下指令, 但卻苦無資料可供參考,在貴站或其它相關站台上, 也找不到類似主題與解決方法, 是否能在此尋求各位前輩們解答? 先謝謝了...
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-12-12 00:32:01 IP:61.221.xxx.xxx 未訂閱
引言: 如題~如何排序 ListView 元件內指定的 Column .. 假設有一個 ListView 元件,內有 5 個 Columns.. 請問我如何排序指定的 Column .. 例如我要針對第 2 或第 4 個做升降冪排序~~ 小弟在 ColumnClick Event 裏下指令, 但卻苦無資料可供參考,在貴站或其它相關站台上, 也找不到類似主題與解決方法, 是否能在此尋求各位前輩們解答?
yamigo 你好: 請先參考以下連結 > --
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-12-12 08:46:39 IP:61.219.xxx.xxx 未訂閱
1. 將ListView之SortType設為stBoth
2. ColumnClick時
void __fastcall TForm1::ListView1ColumnClick(TObject *Sender,
      TListColumn *Column)
{
  ListView1->Tag = Column->Index;//將選擇之column index寫入Tag
  ListView1->CustomSort(NULL,0); //執行sort , 0為升冪1為降冪
}
//---------------------------------------------------------------------------
3. 於 onCompare
void __fastcall TForm1::ListView1Compare(TObject *Sender, TListItem *Item1,
      TListItem *Item2, int Data, int &Compare)
{
  if (ListView1->Tag == 0)  //選first column直接用caption
    Compare = CompareText(Item1->Caption, Item2->Caption);
  else
  {
    int id =ListView1->Tag-1; //取得要sort之subitem之index
    Compare = CompareText(Item1->SubItems->Strings[id],Item2->SubItems->Strings[id]);
  }
  if (Data==1)  //若是要Descending
    Compare = -Compare;
}
[NOTE] CompareText大小寫不分, 依需要可改用其他字串比較方式
yamigo
一般會員


發表:19
回覆:41
積分:12
註冊:2002-12-05

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-12-12 09:05:28 IP:61.16.xxx.xxx 未訂閱
很感謝 RaynorPao 大大給的參考方向, 更感謝 ccchen 大大的熱情幫忙, 直接就給我 source code.. 真感謝兩位..
jazchen
一般會員


發表:1
回覆:2
積分:0
註冊:2004-02-18

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-03-11 11:50:15 IP:202.145.xxx.xxx 未訂閱
感謝 ccchen 提供的範例    小弟順利撰寫出 TListView 指定 Column 排序的功能 我也另用兩個變數來紀錄上次排序的 Column 以及其 升冪或降冪 可以再下一次排序變更 升冪或降冪 的排序方式    但是由於發生錯誤,仔細觀看程式碼! 也上網去找其他範例,發現一些我搞不太懂的問題或情況:
void __fastcall TForm1::ListView1ColumnClick(TObject *Sender,
      TListColumn *Column)
{
  ListView1->Tag = Column->Index;//將選擇之column index寫入Tag
  ListView1->CustomSort(NULL,0); //執行sort , 0為升冪1為降冪
}
中的 ListView1->Tag = Column->Index; 是利用 TListView 物件的 Tag 屬性來紀錄要排序的 Column 如果 TListView 物件內的 listitem 有減少的動作 而沒有把 Tag 設定成 0 ,則程式有可能會發生錯誤 ListView1->CustomSort(NULL,0); 其中第一個參數 NULL 是什麼意思?? 第2個參數 0 便是 ListView1Compare(TObject *Sender, TListItem *Item1, TListItem *Item2, int Data, int &Compare) 中的第4個參數 (int Data) 對吧 這裡應該只要是傳遞 int 型態進來即可 應該算是一個自訂用途的參數~ 這樣對嗎??
sikchun
一般會員


發表:5
回覆:7
積分:2
註冊:2006-07-05

發送簡訊給我
#6 引用回覆 回覆 發表時間:2006-08-01 16:59:08 IP:202.175.xxx.xxx 未訂閱
由於本人對c 語言不太認識,所以麻煩可以翻譯成delphi語言嗎?
謝謝
系統時間:2024-05-04 2:54:29
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!