如何用TTreeView顯示統計資料? |
尚未結案
|
mathewzhao
中階會員 發表:121 回覆:164 積分:67 註冊:2003-04-04 發送簡訊給我 |
|
pedro
尊榮會員 發表:152 回覆:1187 積分:892 註冊:2002-06-12 發送簡訊給我 |
mathewzhao您好 由判斷每一筆的資料欄位裡含有日期欄位的, 對應到TreeView的TTreeNode
然後新增節點, 填入系別 程式片段, 給您參考
procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState); function FindItem(caption:string):TTreeNode; var I: Integer; begin Result:=nil; for I := 0 to TreeView1.Items.Count - 1 do // Iterate begin if TreeView1.Items.Item[i].Text=caption then begin Result:=TreeView1.Items.Item[i]; exit; end; end; // for Result:=nil; end; var tn:TTreeNode; begin if Field.FieldName='日期' then begin tn:=FindItem(Field.Value); if assigned(tn) then TreeView1.Items.AddChild(tn, DBGrid1.DataSource.DataSet.fieldByName('系別').AsString) end; end; |
T.J.B
版主 發表:29 回覆:532 積分:497 註冊:2002-08-14 發送簡訊給我 |
|
mathewzhao
中階會員 發表:121 回覆:164 積分:67 註冊:2003-04-04 發送簡訊給我 |
感謝兩位前輩指點!
pedro前輩的方法當DBGrid1中的Records較多時,會出現2個問題:
Q1:TreeView1隻會出現對應DBGrid1最初幾個Records的Nodes,將DBGrid1的卷軸向下滾動到最後一個Record,TreeView1才會增加所有的Nodes. Q2:如果在DBGrid1的卷軸向下滾動後再向上滾動,則TreeView1會增加重復的Node. 我依T.J.B前輩的建議,將pedro前輩的程式稍作改變將這2個問題解決(Code 如下),但有一個疑問:如果程式是C/S架構,當Table1中的Records較多時,應該如何考慮? 謝謝!
procedure TForm1.FormCreate(Sender: TObject); var tn,NodeRoot:TTreeNode; temp:string; begin NodeRoot:=TreeView1.Items.Add(nil,'本月紀錄'); if Table1.Fields[1].DisplayLabel='日期' then begin Table1.First; while not Table1.Eof do begin if temp<>Table1.Fields[1].AsString then begin tn:=TreeView1.Items.AddChild(NodeRoot,Table1.Fields[1].AsString); TreeView1.Items.AddChild(tn,Table1.Fields[2].AsString); temp:=tn.Text; end else TreeView1.Items.AddChild(tn,Table1.Fields[2].AsString); Table1.Next; end; end; end; |
pedro
尊榮會員 發表:152 回覆:1187 積分:892 註冊:2002-06-12 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |