程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 一種樹型控件在Delphi中的使用方法

一種樹型控件在Delphi中的使用方法

編輯:Delphi

摘 要 樹型控件是一種有效的表示方法,在數據庫應用程序的開發中經常用它可視化表示對象之間的層次關系。本文介紹了Developer Express inc. 的ExpressQuantumGrid Suite中樹型控件 TdxDBTreeList 的使用方法和技巧,特別是由多關系表構成樹型結構的情況。

關鍵詞 樹型控件,TdxDBTreeList,多關系表

簡介

樹型控件是一種有效的表示方法,在數據庫應用程序的開發中經常用它可視化表示對象之間的層次關系,便於用戶的操作和使用。比如:表示一個公司部門的層次結構;磁盤文件系統等。Borland 公司的Delphi 開發系統提供了一般的樹型控件TTreeView,它可以在設計時或運行時生成必要的樹型結構圖,方法是通過生成控件對象的 Items 屬性。設計時方式通過手工方式增加items,主要適用於靜態、少量的 items 的情況;運行時方式通過程序生成樹型結構的 items,它既適合靜態又可用於動態的情況。在實際工作中,樹狀結構中的 items 經常來自數據庫的一個或若干個關系表中,若想利用 TTreeView 控件生成相關的樹狀結構,設計時方式很難實現,運行時方式雖然可以實現,但需要程序員設計大量的代碼,而且容易出錯。因此,為了提高開發效率,減少重復開發,我們必須使用 data-aware 樹型控件。Developer Express inc. 的ExpressQuantumGrid Suite 中樹型控件TdxDBTreeList 屬於 data-aware 型,items 不僅可以來自數據庫的關系表,而且可以為數組等其它數據源。本文介紹了TdxDBTreeList 的使用方法和技巧,特別是由多關系表構成樹型結構的情況。

TdxDBTreeList 概述

Developer Express inc. 開發的The ExpressQuantumGrid Suite 包含三個功能強大的控件,它們分別是:TdxTreeList 、 TdxDBTreeList 和 TdxDBGrid。TdxDBTreeList 直接繼承於 TCustomdxDBTreeListControl ,它是 data-aware 型的,不僅結合標准的樹型視圖和列表控件的特性,而且具有獨特的特性:運行時列定制、一個樹結點內編輯任意列的能力和由dataset 生成樹結構。

使用該樹型控件關鍵是設定屬性頁中幾個重要的屬性,分別為:DataSource、KeyField、ParentField 和 Bands。其中 DataSource 為提供樹型結構的數據源,可以為來自一個或若干個關系表的元組的集合,因此它是必須的且不為空;KeyField 為 DataSource 的元組中唯一標識自身的關鍵碼;樹型控件表示的是對象之間的層次關系,除樹根結點之外(最上層項目),每一個結點都有一個唯一的雙親結點(直接上層結點)。ParentField 即是元組中標識其雙親結點的 KeyField 。根結點的 ParentField 值必須不是 DataSource 代表的元組中 KeyField 值之一;Bands 控制樹型結構顯示的列數,通過它提供的 Add 方法增加合適的 Columns ,Columns 有兩個重要的屬性:Caption 和 FieldName 。Caption 可以設定樹型結構的標題,FieldName 代表 DataSource 的元組表示樹型結構項目的字段。例如用如下的部門關系表作為 DataSource 形成樹型結構:

表1 unti 關系表

UnitNo unitName superiorUnit 0000 東南大學 -1 0001 計算機系 0000 000101 硬件教研室 0001 000102 軟件教研室 0001 0002 外語系 0000 000201 大外教研室 0002 000202 專外教研室 0002

其中,unitNo 表示部門號;unitName 部門名稱;superiorUnit 上級部門號。KeyField 設為unitNo;ParentField 設為 superiorUnit ;Bands 的一列 Columns 的 FieldName 設為 unitName 。這樣形成如圖1所示的樹型結構。

圖1 樹型結構示例圖

多關系表生成的樹結構

實際應用中經常需要由兩個或若干個關系表構成樹型結構,從表面上看,TdxDBTreeList 僅支持一個關系表。我們可以巧妙地利用 SQL 中功能強大的 SELECT 語句生成必要的數據源 DataSource 。SELECT 語句不僅可以由一個關系表生成元組集合,還可以由多表生成,語法形式為:

select ………. Union select …….. union select ………。

如存在如下兩個關系表 unit 部門表和 teacher 教師表:

create table unit (
 unitNo varchar2(6) not null, ………..部門號
 unitName varchar2(30), ……….部門名稱
 superiorUnitNo varchar2(6), …..上級部門號
 primary key (unitNo ))
 create teacher (
  teacherNo varchar2(8) not null , ……..教師號
  teacherName varchar2(10) , ……..教師名
  unitNo varchar(6), ……..教師所在教研室號
  primary key (teacherNo),
  foreign key unitNo(unitNo) references unit )

其中,teacher 表的字段 unitNo 為引用unit表的外鍵。假設unit 的關系表內容同表1;teacher的內容如下:

表2 teacher 關系表

teacherNo teacherName unitNo 00010001 Computer1 000101 00010002 Computer2 000102 00020001 Foreign1 000201 00020001 Foreign2 000202

如要生成如圖2所示的來自unit 和 teacher 兩個關系表數據的樹型結構:

圖2 待生成的unit 和 teacher 兩個關系表數據的樹型結構

可以用下列語句:

select unitNo||' ' as unitNo,unitName, superiorUnit
from depart
union
select teacherNo as unitNo,teacherName as unitName,unitNo||' ' as superiorUnit from teacher

生成的數據集作為 TdxDBTreeList 的數據源;unitNo 作為 KeyField;superiorUnit 作為 ParentField 等。需要注意的是,其中 uintNo||' '是一種字符串連接運算,之所以要這麼做是因為 unit 關系模式中 unitNo 的字段寬度為 6 位,而 teacher 中的 teacherNo 為 8 位,作為 TdxDBTreeList 的 KeyField 必須統一二者的寬度,否則可能出現問題,讀者可以親自試驗。

結論

樹型控件是一種強有力的交互工具,利用第三方提供的 data-aware 樹型控件可以效、可靠地開發應用程序。SQL 中的 SELECT 是一個功能強大的語句,靈活的使用它可以實現過程性語言所無法代替的效果。欲了解 TdxDBTreeList 的詳細情況可以查看該公司的網站 www.devexpress.com 。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved