TREE는 너무 헷갈려서 잘모르겠네요.
DB구조
| 이름 | 레벨 | 코드1 | 코드2 | 코드3 | 코드4 | 코드5 | 코드6 |
AAA 1 01
AABB 2 01 01
BBB 1 02
BBBB 2 02 01
BBCC 3 02 01 01
AAA
---- AABB
BBB
---- BBBB
-------- BBCC
이런식으로 나오게 하고 싶습니다. DB는 이미 만들어진거고요.
트리를 이리저리 해봐도 안돼네요. 노드가 너무 헷갈려서..
부탁드려요~
그리고 트리내용을 그대로 인쇄하려면 어떻하죠?
화면이 스크롤 아래 내용까지 전부요.
도움이 되셨으면 좋겠네여....전에 저두 헤맸던 기억이...
type // 메인 이벤트
PENTRec = ^TENTRec;
TENTRec = record
CD: string; // 메인이벤트 ID
NM: string; // 메인이벤트 명
end;
type // 서브이벤트
PSUBRec = ^TSUBRec;
TSUBRec = record
ENT: string; // 메인이벤트 ID
CD: string; // 서브이벤트 ID
NM: string; // 서브이벤트 명
end;
procedure TfrmEMS_EMSTree.sbRetrieveClick(Sender: TObject);
// 이벤트코드에 의한 데이타 조회
var
entPtr: PENTRec; // 이벤트 포인터 설정
subPtr: PSUBRec; // 서브이벤트 포인터 설정
Temp_ITEM11,Temp_ITEM12:String; //이벤트
Temp_ITEM21,Temp_ITEM22,Temp_ITEM23:String; // 서브이벤트
Root_Node, Ent_Node, Sub_Node: TTreeNode; // Node이름
iENTLOOP, iSUBLOOP:Integer; // 각 Node별 데이타를 TReeview에 대입하기위한 Loop변수
itemcount, idx, i : integer;
entIndex,subIndex: LongInt; // Node의 Index
sPentCd, sSubCd:String; // 데이타별로 부모노드와 비교하여 대입하기위해 지정하는 변수
begin
inherited;
tvEventList.Items.BeginUpdate;
// TreeView1 initialize
tvEventList.Items.Clear;
// 메인이벤트에 대해 treeview 적용
with qryEVENT do
begin
Close;
ParamByName('ENT_ID').AsString := ceENT_ID.Text; // 입력받은 이벤트ID로 조회
Open;
first;
for iENTLOOP := 1 to qryEVENT.RecordCount do // 건수가 있다면
begin
New(entPtr); // 메인이벤트 신규포인트 선언하고...
Temp_ITEM11 := qryEVENTENT_ID.AsString;
Temp_ITEM12 := qryEVENTENT_NAME.AsString;
entPtr^.CD := Temp_ITEM11; // 조회된 이벤트ID를 대입
entPtr^.NM := Temp_ITEM12; // 조회된 이벤트명을 대입
// treeview에 해당항목 추가
// root만 AddObject를 사용하고 하위는 AddChildObject를 사용한다
Ent_Node := tvEventList.Items.AddObject(nil, Temp_ITEM12, entPtr);
Ent_Node.ImageIndex := 0; // 이미지리스트(imagelist1)의 0번째 image
Ent_Node.SelectedIndex := 0; //
Next;
end;
end;
subIndex := 0;
//서브이벤트-서브아이템등록
WITH qrySUB do
begin
Close;
ParamByName('ENT_ID').AsString := ceENT_ID.Text;
Open;
first;
for iSUBLOOP := 1 to qrySUB.RecordCount do
begin
New(subPtr);
Temp_ITEM21 := qrySUBENT_ID.AsString;
Temp_ITEM22 := qrySUBSUB_ENT_ID.AsString;
Temp_ITEM23 := qrySUBSUB_E_NAME.AsString;
subPtr^.ENT := Temp_ITEM21;
subPtr^.CD := Temp_ITEM22;
subPtr^.NM := Temp_ITEM23;
for i := 0 to tvEventList.Items.Count-1 do
begin
if tvEventList.Items[i].Level = subIndex Then
begin
sPentCd := PENTRec(tvEventList.Items[i].Data)^.CD;
// Node별 이벤트id가 동일하다면
if sPentCd = Temp_ITEM21 Then
begin
// treeview에 추가하기
Sub_Node := tvEventList.Items.AddChildObject(tvEventList.Items[i], Temp_ITEM23, subPtr);
Sub_Node.ImageIndex := 1;
Sub_Node.SelectedIndex := 1;
end;
end;
end;
Next;
end;
Close;
end;