請教TREEVIEW與數據庫的結合 |
答題得分者是:qoo1234
|
dengguo
一般會員 發表:41 回覆:49 積分:23 註冊:2004-01-09 發送簡訊給我 |
看過網站上一些大大的TREEVIEW從資料表取值的帖子,但我的資料表設計與這些例子中的不一樣,如下圖:
我想在TREEVIEW中顯示為如下結果: -毅成公司
|--生產部
| |--絲印
| |--塑膠
| |--吸塑
|--行政部
|--品管部
|--後勤部
|--廚房
|--保安
|--電工 請各位大大幫忙指點一下基於這樣的資料表該如何操 作(資料表結構不可更改) ??謝謝!! 初學delphi,請各位多多提點!謝謝! 發表人 - dengguo 於 2004/05/22 12:24:50
|
qoo1234
版主 發表:256 回覆:1167 積分:659 註冊:2003-02-24 發送簡訊給我 |
function StrLeft(const mStr: string; mDelimiter: string): string; begin Result := Copy(mStr, 1, Pos(mDelimiter, mStr) - 1); end; function ListCount(mList: string; mDelimiter: string = ','): Integer; var I, L: Integer; begin Result := 0; if mList = '' then Exit; L := Length(mList); I := Pos(mDelimiter, mList); while I > 0 do begin mList := Copy(mList, I Length(mDelimiter), L); I := Pos(mDelimiter, mList); Inc(Result); end; Inc(Result); end; function ListValue(mList: string; mIndex: Integer; mDelimiter: string = ','): string; var I, L, K: Integer; begin L := Length(mList); I := Pos(mDelimiter, mList); K := 0; Result := ''; while (I > 0) and (K <> mIndex) do begin mList := Copy(mList, I Length(mDelimiter), L); I := Pos(mDelimiter, mList); Inc(K); end; if K = mIndex then Result := StrLeft(mList mDelimiter, mDelimiter); end; function TreeNodeString(mTreeNode: TTreeNode; mDelimiter: string = '\'): string; begin Result := ''; while Assigned(mTreeNode) do begin Result := mTreeNode.Text mDelimiter Result; mTreeNode := mTreeNode.Parent; end; Delete(Result, Length(Result) - Length(mDelimiter) 1, MaxInt); end; function LineTextToTreeView(mStrings: TStrings; mTreeView: TTreeView; mDelimiter: string = '\'): Boolean; var I, J, K: Integer; vStrPath: string; vStrText: string; vTreeNode: TTreeNode; vBoolFind: Boolean; begin Result := False; if not (Assigned(mTreeView) and Assigned(mStrings)) then Exit; mTreeView.Items.Clear; for I := 0 to mStrings.Count - 1 do begin vStrPath := ''; vTreeNode := nil; for J := 0 to ListCount(mStrings[I], mDelimiter) - 1 do begin vStrText := ListValue(mStrings[I], J, mDelimiter); vStrPath := vStrPath mDelimiter vStrText; vBoolFind := False; for K := 0 to mTreeView.Items.Count - 1 do if mDelimiter TreeNodeString(mTreeView.Items[K], mDelimiter) = vStrPath then begin vTreeNode := mTreeView.Items[K]; vBoolFind := True; Break; end; if vBoolFind then Continue; vTreeNode := mTreeView.Items.AddChild(vTreeNode, vStrText); end; end; Result := True; end; procedure TForm1.Button1Click(Sender: TObject); var SL:TStringList; begin ADOQuery1.SQL.Text:='Select * from 資料表'; ADOQuery1.Active:=True; SL:=TStringList.Create; while Not ADOQuery1.Eof do begin if ADOQuery1.FieldByName('組別').AsString <> '' then SL.Add(ADOQuery1.FieldByName('公司').AsString '\' ADOQuery1.FieldByName('部門').AsString '\' ADOQuery1.FieldByName('組別').AsString) else SL.Add(ADOQuery1.FieldByName('公司').AsString '\' ADOQuery1.FieldByName('部門').AsString); ADOQuery1.Next; end; LineTextToTreeView(SL, TreeView1); SL.Free; end; end. |
dengguo
一般會員 發表:41 回覆:49 積分:23 註冊:2004-01-09 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |