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

請教TREEVIEW與數據庫的結合

答題得分者是:qoo1234
dengguo
一般會員


發表:41
回覆:49
積分:23
註冊:2004-01-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-05-22 12:20:14 IP:218.16.xxx.xxx 未訂閱
看過網站上一些大大的TREEVIEW從資料表取值的帖子,但我的資料表設計與這些例子中的不一樣,如下圖: 我想在TREEVIEW中顯示為如下結果: -毅成公司 |--生產部 | |--絲印 | |--塑膠 | |--吸塑 |--行政部 |--品管部 |--後勤部 |--廚房 |--保安 |--電工 請各位大大幫忙指點一下基於這樣的資料表該如何操 作(資料表結構不可更改) ??謝謝!! 初學delphi,請各位多多提點!謝謝! 發表人 - dengguo 於 2004/05/22 12:24:50
qoo1234
版主


發表:256
回覆:1167
積分:659
註冊:2003-02-24

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-05-22 14:42:39 IP:218.163.xxx.xxx 未訂閱
 
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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-05-22 14:58:36 IP:218.16.xxx.xxx 未訂閱
謝謝 qoo1234的解答!! 不過紅色部分的自定涵數還須慢慢消化!!努力中..... 初學delphi,請各位多多提點!謝謝!
系統時間:2024-05-18 23:58:13
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!