有关ERP中BOM以树状显示在DBTREEVIEW中的问题 |
尚未結案
|
SUNSEAVE
一般會員 發表:66 回覆:44 積分:22 註冊:2003-09-23 發送簡訊給我 |
|
doll_candy
初階會員 發表:110 回覆:53 積分:32 註冊:2002-04-22 發送簡訊給我 |
|
SUNSEAVE
一般會員 發表:66 回覆:44 積分:22 註冊:2003-09-23 發送簡訊給我 |
|
Fishman
尊榮會員 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
Hi: DBTreeView 是 3rd Party 的元件嗎?
D6 與 D7 中似乎找不到耶!!
你也可以用 TreeView 的元件,在自己去建立這棵 Tree
procedure TForm1.Button1Click(Sender: TObject); var MyTreeNode: TTreeNode; procedure QueryDetails(ParentID : Integer ; TreeNode : TTreeNode); var Details : TQuery; MyTreeNode: TTreeNode; begin Details := TQuery.Create(Self); Details.DatabaseName := QRY_CSQ_OUTLINES.DatabaseName; Details.Close; Details.SQL.Clear; Details.SQL.Add('SELECT CREATION_DATE,' #13 ' CREATED_BY,' #13 ' LAST_UPDATE_DATE,' #13 ' LAST_UPDATED_BY,' #13 ' OUTLINE_ID,' #13 ' ENTRY_SEQUENCE,' #13 ' LINE_TYPE_CODE,' #13 ' LANGUAGE_CODE,' #13 ' PROMPT,' #13 ' DESCRIPTION,' #13 ' SUB_OUTLINE_ID,' #13 ' QUESTION_ID' #13 'FROM CSQ_OUTLINE_ENTRIES' #13 'WHERE OUTLINE_ID = ' IntToStr(ParentID)); Details.Open; WHILE NOT Details.Eof DO BEGIN MyTreeNode := TreeView1.Items.AddChild(TreeNode,Details.FieldByName('DESCRIPTION').AsString); MyTreeNode.Text := Details.FieldByName('DESCRIPTION').AsString; QueryDetails(Details.FieldByName('SUB_OUTLINE_ID').AsInteger,MyTreeNode); Details.Next; END; end; begin TreeView1.Items.Clear; QRY_CSQ_OUTLINES.Close; QRY_CSQ_OUTLINES.ParamByName('P_OUTLINE_ID').AsString := '1'; QRY_CSQ_OUTLINES.Open; WHILE NOT QRY_CSQ_OUTLINES.Eof DO BEGIN MyTreeNode := TreeView1.Items.AddChild(NIL,QRY_CSQ_OUTLINES.FieldByName('DESCRIPTION').AsString); QueryDetails(QRY_CSQ_OUTLINES.FieldByName('OUTLINE_ID').AsInteger,MyTreeNode); QRY_CSQ_OUTLINES.Next; END; end;-------------------------------- 小弟才疏學淺,若有謬誤請不吝指教 --------------------------------
------
Fishman |
doll_candy
初階會員 發表:110 回覆:53 積分:32 註冊:2002-04-22 發送簡訊給我 |
hi,您好
我之前也是根據 stonys前輩 所教之方法,再修改之,你可先參考如下網址,再看後來修改之程式,
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=40019 procedure TFMenu.FormCreate(Sender: TObject);
var
I, J, K, F, M, N ,O ,P ,Q, XYZ: Integer;
TEMPSTR,TEMPSTR2,TEMPSTR3,TEMPSTR4,TEMPSTR5 : string;
begin
Top := 0;
Left := 0;
if ADOQuery1.Active then
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
end;
ADOQuery1.SQL.Add('SELECT A.MA002,C.MC002,B.MB002 FROM FADMMA A,FADMMB B,FADMMC C' );
ADOQuery1.SQL.Add('WHERE');
ADOQuery1.SQL.Add(' (B.MB004 = A.MA001');
ADOQuery1.SQL.Add(' and B.MB003 = C.MC001)');
ADOQuery1.SQL.Add(' ORDER BY A.MA001, C.MC001, B.MB001'); ADOQuery1.Open;
M := 0;
N := 0;
O := 0;
Q := 1;
for I := 1 to ADOQuery1.FieldCount do begin
ADOQuery1.First;
TEMPSTR := '';
TEMPSTR2 := '';
TEMPSTR3 := '';
TEMPSTR4 := '';
TEMPSTR5 := '';
for XYZ:=0 to ADOQuery1.RecordCount-1 do begin
case I of
1: Begin
if ADOQuery1.Fields[I - 1].Value <> TEMPSTR then begin
TEMPSTR := ADOQuery1.Fields[I - 1].Value;
TreeView1.Items.AddChild(nil, TEMPSTR);
J:=J 1; end;
End;
2: Begin
if (ADOQuery1.Fields[I - 2].Value <> TEMPSTR) or (ADOQuery1.Fields[I - 1].Value <> TEMPSTR2) then begin
TEMPSTR := ADOQuery1.Fields[I - 2].Value;
TEMPSTR2 := ADOQuery1.Fields[I - 1].Value;
for K := 0 to J - 1 do begin
if TreeView1.Items[K].Text = ADOQuery1.Fields[I - 2].Value then begin
TreeView1.Items.AddChild(TreeView1.Items[K], TEMPSTR2);
J := J 1;
end;
end;
End;
End;
3: Begin
if (ADOQuery1.Fields[I - 3].Value <> TEMPSTR) or (ADOQuery1.Fields[I - 2].Value <> TEMPSTR2) or (ADOQuery1.Fields[I - 1].Value <> TEMPSTR3) then Begin
TEMPSTR := ADOQuery1.Fields[I - 3].Value;
TEMPSTR2 := ADOQuery1.Fields[I - 2].Value;
TEMPSTR3 := ADOQuery1.Fields[I - 1].Value;
if (TEMPSTR4 = TEMPSTR) AND (TEMPSTR5 = TEMPSTR2) Then Q := Q 1;
for K := 0 to J - 1 do begin
if ((TEMPSTR4 <> TEMPSTR) AND (TEMPSTR5 <> TEMPSTR2)) OR ((TEMPSTR4 <> TEMPSTR) AND (TEMPSTR5 = TEMPSTR2)) Then Begin
P := 0;
Q := 0;
TEMPSTR4 := TEMPSTR;
TEMPSTR5 := TEMPSTR2;
End;
if (TEMPSTR4 = TEMPSTR) AND (TEMPSTR5 <> TEMPSTR2) Then Begin
P := P 1;
P := P Q;
TEMPSTR5 := TEMPSTR2;
Q := 1;
End;
IF P= 0 Then Begin
if (TEMPSTR = TreeView1.Items[K].Text) and (TEMPSTR2 = TreeView1.Items[K 1].Text) then begin
TreeView1.Items.AddChild(TreeView1.Items[K 1], TEMPSTR3);
J := J 1;
end
end else Begin
if (TEMPSTR = TreeView1.Items[K].Text) and (TEMPSTR2 = TreeView1.Items[K P 2].Text) then begin
TreeView1.Items.AddChild(TreeView1.Items[K P 2], TEMPSTR3);
J := J 1;
end
end;
end;
End;
End;
end;
ADOQuery1.Next;
end;
end;
end;
方法很土,所以有可修改的地方,再告之 doll_candy
------
doll_candy |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |