首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

DevExpress TdxDBTreeList 實戰:從單表到多表樹狀結構的建構

     編輯:Delphi

樹狀結構是呈現階層式資料的最佳介面,無論是企業組織架構、磁碟目錄、或是多層級分類選單,皆有其身影。Delphi 內建的 TTreeView 雖可手動或程式動態建立節點,但面對龐大資料庫資料時,程式碼繁瑣且難維護。DevExpress ExpressQuantumGrid Suite 中的 TdxDBTreeList 為資料感知型樹狀控件,能直接繫結 DataSource,大幅簡化開發。本文深入探討其核心屬性設定,並重點示範如何以 SQL UNION 整合多關聯表構建複雜樹狀結構。

TdxDBTreeList 核心屬性速覽

屬性說明
DataSource資料來源,必須指定,提供樹狀結構的資料集
KeyField唯一識別每筆記錄的鍵值欄位(如部門代碼)
ParentField指向父節點的鍵值欄位(如上級部門代碼),根節點的 ParentField 不得出現在 KeyField 中
Bands控制顯示欄位,透過 Add 方法新增 Columns,設定 Caption(標題)與 FieldName(資料欄位)

單表樹狀結構範例:企業部門架構

假設 unit 部門表結構如下:

UnitNo (PK) | UnitName | SuperiorUnit
--------------------------------------
0000        | 東南大學  | -1
0001        | 計算機系  | 0000
000101      | 硬體教研室| 0001
000102      | 軟體教研室| 0001
0002        | 外語系    | 0000
000201      | 大外教研室| 0002
000202      | 專外教研室| 0002

設定:KeyField = UnitNo、ParentField = SuperiorUnit、Bands.Column.FieldName = UnitName,即可自動生成如下樹狀結構:

單表部門樹狀結構示意圖

進階挑戰:多關聯表合併樹狀結構

實務上常需將「部門」與「教師」兩張表合併顯示:部門為父節點,教師為子節點。TdxDBTreeList 僅接受單一 DataSource,解決之道是利用 SQL UNION 將多表合併為單一虛擬資料集。

資料表結構

-- 部門表
CREATE TABLE unit (
  UnitNo VARCHAR2(6) PRIMARY KEY,
  UnitName VARCHAR2(30),
  SuperiorUnitNo VARCHAR2(6)
);

-- 教師表
CREATE TABLE teacher (
  TeacherNo VARCHAR2(8) PRIMARY KEY,
  TeacherName VARCHAR2(10),
  UnitNo VARCHAR2(6) REFERENCES unit(UnitNo)
);

UNION 查詢統一欄位寬度

關鍵技巧:KeyField 必須資料型態與長度一致。部門 UnitNo 為 6 碼,教師 TeacherNo 為 8 碼,需以字串連接補齊:

SELECT UnitNo || ' ' AS UnitNo, UnitName, SuperiorUnitNo AS SuperiorUnit
FROM unit
UNION
SELECT TeacherNo AS UnitNo, TeacherName AS UnitName, UnitNo || ' ' AS SuperiorUnit
FROM teacher

|| ' ' 使兩邊 UnitNo 統一為 8 字元(含空白),避免比對失敗。合併後的資料集指派給 DataSource,設定 KeyField = UnitNo、ParentField = SuperiorUnit,即可獲得「部門-教師」兩層樹狀結構:

部門與教師合併樹狀結構

實務提醒

  • UNION 會自動去除重複列;若需保留重複,請改用 UNION ALL
  • 根節點的 ParentField 值(如 -1 或空白)必須不出現在任何記錄的 KeyField 中
  • 大量資料時,建議為 KeyField、ParentField 建立索引以提升載入速度

DevExpress 官網 www.devexpress.com 提供完整文件與範例。善用 TdxDBTreeList 搭配 SQL UNION,即能優雅解決多表樹狀結構呈現難題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved