線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1415
推到 Plurk!
推到 Facebook!

对TreeView树按特定要求进行排序,各位帮忙。谢谢。

尚未結案
xiaoqlj
一般會員


發表:10
回覆:19
積分:5
註冊:2004-05-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-06-14 15:46:52 IP:220.188.xxx.xxx 未訂閱
有如下树: |-佰盛科技 |---Z管理员 |---Y管理员 |---X管理员 | |---D信息部 | |---张一 | |---张二 | |---C开发部 | |---张三 | |---张四 | |---B调研部 | |---张五 | |---张六 | |---A服务部 | |---张七 | |---张八 要求是,按拼音排序,但不排部门(即不对信息部、开发部、调研部、服务部进行排序,保持原状不变。),只排成员。 排序后结果: |-佰盛科技 |---X管理员 //这里的三个成员,进行了排序,下面的部门保持不变。 |---Y管理员 |---Z管理员 | |---D信息部 | |---张一 | |---张二 | |---C开发部 | |---张三 | |---张四 | |---B调研部 | |---张五 | |---张六 | |---A服务部 | |---张七 | |---张八 请问,这样如何在TreeView的OnCompare事件里来编写代码?
------
http://www.nbye.net
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-06-14 17:46:05 IP:210.65.xxx.xxx 未訂閱
Hi xiaoqlj,    參考這二篇:    http://delphi.ktop.com.tw/topic.php?topic_id=66651 http://delphi.ktop.com.tw/topic.php?topic_id=66991 並加以修改如下:
procedure TForm1.TreeView1Compare(Sender: TObject; Node1, Node2: TTreeNode;
  Data: Integer; var Compare: Integer);
begin
  case CheckBox1.Checked of
    True :  begin
              if ((node1.Count = 0) and (node2.Count = 0)) then
                begin
                  if node1.Text < node2.Text then
                    Compare := -1
                  else if node1.Text = node2.Text then
                    Compare := 0
                  else if node1.Text > node2.Text then
                    Compare := 1;
                end
              else
                Compare := 0;
            end;
    False : begin
              if ((node1.Count = 0) and (node2.Count = 0)) then
                begin
                  if node1.Text > node2.Text then
                    Compare := -1
                  else if node1.Text = node2.Text then
                    Compare := 0
                  else if node1.Text < node2.Text then
                    Compare := 1;
                end
              else
                Compare := 0;
            end;
    end;
end;
亦即用 node1.count & node2.count 來判定是屬於成員或是部門,而決定是否進行排序 ---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman
xiaoqlj
一般會員


發表:10
回覆:19
積分:5
註冊:2004-05-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-06-15 09:40:09 IP:220.188.xxx.xxx 未訂閱
你好 Fishman 但如果部门下面一个成员也没有呢?这时,这个部门也会被排序了,又如何来处理呢?
------
http://www.nbye.net
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-06-15 10:58:53 IP:210.65.xxx.xxx 未訂閱
Hi xiaoqlj,    那你如何去區分是部門或是成員?    如果是用層級(node1.Level & node2.Level)的話,可以使用以下方法:
procedure TForm1.TreeView1Compare(Sender: TObject; Node1, Node2: TTreeNode;
  Data: Integer; var Compare: Integer);
begin
  case CheckBox1.Checked of
    True :  begin
              if ((node1.Level = 1) and (node2.Level = 1)) then
                begin
                  if node1.Text < node2.Text then
                    Compare := -1
                  else if node1.Text = node2.Text then
                    Compare := 0
                  else if node1.Text > node2.Text then
                    Compare := 1;
                end
              else
                Compare := 0;
            end;
    False : begin
              if ((node1.Level = 1) and (node2.Level = 1)) then
                begin
                  if node1.Text > node2.Text then
                    Compare := -1
                  else if node1.Text = node2.Text then
                    Compare := 0
                  else if node1.Text < node2.Text then
                    Compare := 1;
                end
              else
                Compare := 0;
            end;
    end;
end;
若不是,你可能必須於 node 中儲存部門或是成員之資訊(或是有辦法辨別出是部門或是成員),確認是否進行排序。 ---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman
xiaoqlj
一般會員


發表:10
回覆:19
積分:5
註冊:2004-05-28

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-06-15 11:54:18 IP:220.188.xxx.xxx 未訂閱
你好! 我部門表和成員表是存在兩張不同表裏的。所以這樣區分的。而且我的部門層次理論上是無限級的。 我按你的方法實現了。現在就差部門下面沒有成員時怎麼來區分了。不過我這裏部門和成員,用了不同的image,根據node.ImageIndex屬性是可以區分的。只是這樣不好。想找另一種方法。 當然也可以根據你的說的,通過Node.data來存儲信息加以區別。 對了,這個繁體怎麼樣?呵呵。
------
http://www.nbye.net
系統時間:2024-05-19 17:22:28
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!