对TreeView树按特定要求进行排序,各位帮忙。谢谢。 |
尚未結案
|
xiaoqlj
一般會員 發表:10 回覆:19 積分:5 註冊:2004-05-28 發送簡訊給我 |
有如下树:
|-佰盛科技
|---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 發送簡訊給我 |
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 發送簡訊給我 |
|
Fishman
尊榮會員 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |