?? 040.htm
字號:
<HTML><HEAD><meta http-equiv="Content-Type" content="text/html; charset=GB2312"><TITLE>-->DELPHI基礎(chǔ)教程-->第十六章 數(shù)據(jù)瀏覽部件的應用及編程(二)</TITLE>
<META NAME="keywords" CONTENT=" DELPHI基礎(chǔ)教程 第十六章 數(shù)據(jù)瀏覽部件的應用及編程(二)">
<META NAME="description" CONTENT=" - DELPHI基礎(chǔ)教程 - 第十六章 數(shù)據(jù)瀏覽部件的應用及編程(二)">
<style>
<!--
#page {position:absolute; z-index:0; left:0px; top:0px}
.tt3 {font: 9pt/12pt "宋體"}
.tt2 {font: 12pt/15pt "宋體"}
a {text-decoration:none}
a:hover {color: blue;text-decoration:underline}
-->
</style>
</HEAD>
<body text="#000000" aLink=#9900ff link=#006699 vLink=#006699 bgcolor="#FFFFFF" leftmargin="3" topmargin="3" marginheight="3" marginwidth="3">
<TABLE WIDTH="100%" CELLPADDING=10 CELLSPACING=0 BORDER=0>
<TR>
<TD CLASS="tt3" VALIGN="top" width="8%" bgcolor="#e0e0e0"><strong><A HREF="041.htm"><FONT style="FONT-SIZE: 9pt">后一頁</font></A><BR>
<A HREF="039.htm"><FONT style="FONT-SIZE: 9pt">前一頁</font></A><BR>
<A HREF="index.html"><FONT style="FONT-SIZE: 9pt">回目錄</font></A><BR>
<A HREF="../../../../index.htm"><FONT style="FONT-SIZE: 9pt">回首頁</font></A><BR>
</strong>
</TD>
<TD class="tt2" bgcolor="#F5F8F8" width="84%"><center><B><FONT style="FONT-SIZE: 16.5pt" COLOR="#FF6666" FACE="楷體_GB2312">第十六章 數(shù)據(jù)瀏覽部件的應用及編程(二)</FONT></B></center>
<hr color="#EE9B73" size="1" width="94%">
</font><p>在TDBGrid部件中顯示數(shù)據(jù)庫表中的記錄信息時,如果TDBGrid使用數(shù)據(jù)集部件在運行過程中動態(tài)生成的字段部件時,TDBGrid顯示數(shù)據(jù)庫表中的記錄是按表中記錄的缺省順序和字段的缺省順序顯示表中的記錄信息,而且要顯示表中各個記錄的全部字段的值。而在大多數(shù)情況下,用戶可能希望按自己喜歡的字段順序顯示記錄的各個字段,有時還希望只顯示記錄的部分字段值,要達到這一目的,必須在設(shè)計階段使用字段編輯器來創(chuàng)建永久性的字段部件,并且還要設(shè)置各個字段部件有關(guān)的屬性。</p>
<p>當使用字段編輯器(Fields Editor)創(chuàng)建永久性的字段部件提供給TDBGrid部件來使用時,我們可以在TDBGrid部件中更靈活地顯示數(shù)據(jù)庫表中的記錄信息。例如在字段編輯器中的Fields列表框中我們可以設(shè)定字段部件的顯示順序,在設(shè)定好字段的顯示順序之后,TDBGrid部件便按這個順序顯示記錄的各個字段值,當我們設(shè)置字段部件的DisplayFormat和EditFormat屬性之后,在TDBGrid部件中便相應地以設(shè)定的顯式和編輯格式顯示字段值和編輯字段值;當設(shè)置某一個字段部件的Required屬性為True時,當插入一條新記錄時,必須要為該字段輸入相應的字段值,否則會出錯;通過設(shè)置字段部件的Visible屬性,可以確定相應的字段值是否在TDBGrid組件中顯示。有關(guān)使用字段編輯器來創(chuàng)建字段部件,設(shè)置字段部件的屬性請參看3.6.2節(jié)。 </p>
<p>16.4.1 TDBGrid部件的主要屬性及應用 </p>
<p>TDBGrid部件是用于顯示和編輯數(shù)據(jù)庫表中的記錄信息的重要部件,它是我們在程序設(shè)計過程當中要經(jīng)常使用的、靈活地用于顯示和編輯數(shù)據(jù)庫表中的記錄信息的一個強有力的工具。TDBGrid具有很多重要的屬性,我們可以在程序設(shè)計階段和程序運行過程中進行設(shè)置。TDBGrid部件的一些重要屬性及其設(shè)置方法請參看聯(lián)機幫助文件。TDBGrid部件中一些重要的屬性是Option屬性、DrawMode屬性和DefaultDrawing屬性,我們重點對兩個屬性進行闡述。</p>
<p>Options屬性:它是TDBGrid部件的一個擴展屬性,在程序設(shè)計階段設(shè)置Options屬性可以控制TDBGrid部件的顯示特性和對事件的響應特性。Options屬性在TDBGrid部件的屬性欄中顯示時,它的前面帶有一個“+”標志,雙擊“+”標志,便可以展開一個布爾型屬性列表,用戶可以逐個地修改其中的各個屬性值,修改完畢后可以雙擊Options屬性前的“-”標志,使TDBGrid部件的屬性列表恢復到原來的顯示狀態(tài)。</p>
<p>表16.5列出了Options屬性中包含的所有的擴展屬性項以及它們對TDBGrid部件的影響。 </p>
<p>表16.5 TDBGrid部件的Options屬性中的擴展屬性項</p>
<p>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</p>
<p>屬 性 名 取 值 及 影 響 </p>
<p>─────────────────────────────────</p>
<p>dbEditing True: 缺省情況下為此值,確保用戶能夠在網(wǎng)格中編輯插</p>
<p>入和刪除數(shù)據(jù)庫表中的記錄</p>
<p>False:在網(wǎng)格中不能編輯、插入和刪除表中的記錄</p>
<p>─────────────────────────────────</p>
<p>dbAlwaysShow True: 當用戶選中記錄中的一個字段時,自動地使該字段</p>
<p>Editor 處于編輯狀態(tài)</p>
<p>False:缺省情況下為此值。當一個字段被選中,它不能</p>
<p>自動地變成編輯狀態(tài)</p>
<p>─────────────────────────────────</p>
<p>dgTitles True: 缺省情況下為此值。在網(wǎng)格的第一行中顯示字段名</p>
<p>或字段標題</p>
<p>False:在網(wǎng)格中不顯示字段名或字段對應的標題</p>
<p>─────────────────────────────────</p>
<p>dgIndicator True: 缺省情況下為此值。在網(wǎng)格的最左邊用一個黑箭頭</p>
<p>標注當前記錄指針所在的位置,在插入狀態(tài)時,箭</p>
<p>頭變成星狀,在編輯狀時,箭頭變成"I"頭。</p>
<p>False:在網(wǎng)格中不標識當前記錄指針的位置</p>
<p>─────────────────────────────────</p>
<p>dgColumnResize True: 缺省情況下為此值。通過拖拉網(wǎng)格的垂直分隔線可</p>
<p>以改變網(wǎng)格中各列的寬度,在具體操作時要拖拉各</p>
<p>列中顯示字段標題區(qū)域中的垂直分隔線。</p>
<p>False:網(wǎng)格中各列的寬度不能改變</p>
<p>─────────────────────────────────</p>
<p>dgCloLines True: 缺省情況下為此值。在網(wǎng)格中顯示各列之間的垂直</p>
<p>分隔線。</p>
<p>False:在網(wǎng)格中不顯示垂直分隔線</p>
<p>─────────────────────────────────</p>
<p>dgRowLines True: 缺省情況下為此值。在網(wǎng)格中顯示各行之間的水平</p>
<p>分隔線。</p>
<p>False:在網(wǎng)格中不顯示水平分隔線。</p>
<p>─────────────────────────────────</p>
<p>dgTabs True: 缺省情況下為此值。可以在記錄的各字段之間移動</p>
<p>輸入焦點(也即選擇提示棒)</p>
<p>False:不能在記錄的名字段之間移動輸入焦點,在網(wǎng)格中</p>
<p>按Tab鍵時,直接跳出網(wǎng)格</p>
<p>─────────────────────────────────</p>
<p>dgRowSelect True: 選擇提示棒覆蓋整條記錄中的全部字段</p>
<p>False:缺省情況下為此值。選擇提示棒一次只覆蓋記錄中</p>
<p>的一個字段</p>
<p>─────────────────────────────────</p>
<p>dgAlwaysShow True:
缺省情況下為此值。在網(wǎng)格始終顯示選擇提示棒,即</p>
<p>-Selection 使其控件獲得焦點時,也是如此。</p>
<p>False:只在當網(wǎng)格獲得焦點時,才顯示選擇提示棒。</p>
<p>─────────────────────────────────</p>
<p>dbConfirmDelete True:
缺省情況下為此值。當在網(wǎng)格中刪除記錄時,彈出確</p>
<p>認信息。</p>
<p>False:在網(wǎng)格中刪除記錄時不彈出確認信息。</p>
<p>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</p>
<p> </p>
<p>用戶想了解這些可選屬性項的作用和影響,還可以參看聯(lián)機幫助信息。</p>
<p>DragMode屬性:該屬性有兩個可選的屬性值。當它的值被設(shè)置為dmManual時,在應用程序運行過程中,用戶可以用鼠標拖放網(wǎng)格中的各列,改變各列在網(wǎng)格中的顯示順序和位置。當用鼠標拖放網(wǎng)格中的一列、改變它在網(wǎng)格中的位置時,只是改變了該列在數(shù)據(jù)集中的位置,并沒有改變它對應的數(shù)據(jù)庫表中的位置。當該屬性的值被設(shè)置成dmAutomatic時,用戶不能用鼠標拖放網(wǎng)格中的各列而改變它在網(wǎng)格中的位置。</p>
<p>DefalultDrawing屬性:該屬性是布爾型屬性,它用于控制網(wǎng)格中各網(wǎng)格單元的繪制方式。在缺省情況下,該屬性的值為True,也就是說Delphi使用網(wǎng)格本身缺省的方法繪制網(wǎng)格中各網(wǎng)格單元,并填充各網(wǎng)格單元中的內(nèi)容,各網(wǎng)格單元中的數(shù)據(jù)根據(jù)其對應的字段部件的DisplayFormat屬性和EidtFormat屬性進行顯示和繪制。如果DefaulDrawing屬性被設(shè)置為False時,Delphi不會自動地繪制網(wǎng)格中各網(wǎng)格單元和網(wǎng)格單元中的數(shù)據(jù),用戶必須自己為TDBGrid部件的OnDrawDataCell事件編寫相應的程序用于繪制各網(wǎng)格單元和其中的數(shù)據(jù)。</p>
<p>在了解了TDBGrid部件的各個屬性之后,我們便可以使用TDBGrid部件來顯示和編輯數(shù)據(jù)庫表中的數(shù)據(jù)了。圖16.5所示的應用窗體中各部件的屬性設(shè)置如表16.6所示。</p>
<p> </p>
<p>表16.6 各部件的屬性設(shè)置</p>
<p>━━━━━━━━━━━━━━━━━━━━</p>
<p>屬 性 名 屬 性 值</p>
<p>────────────────────</p>
<p>Table1.DatabaseName DEMOS</p>
<p>Table1.TableName Customer.DB</p>
<p>Table1.CanModify True</p>
<p>DataSource1.DataSet Table1</p>
<p>DataSource1.AutoEdit True</p>
<p>DBGrid1.Datasource DataSource1</p>
<p>DBGrid1.ReadOnly False</p>
<p>━━━━━━━━━━━━━━━━━━━━</p>
<p> </p>
<p>在其他數(shù)據(jù)瀏覽部件(如TDBEdit)中編輯修改其中的內(nèi)容時,只要用戶用Tab鍵或鼠標將焦點移到其他部件時,用戶對該字段的修改會自動地寫回到數(shù)據(jù)庫表中,使用TDBGrid部件編輯修改數(shù)據(jù)庫表時,Delphi是以記錄為基本單位將修改寫回磁盤上的數(shù)據(jù)庫表的。用戶在編輯和修改表中的當前記錄時,只有用戶將記錄指針移到其他的記錄時,Delphi才將用戶對當前記錄的修改寫回到磁盤上的數(shù)據(jù)庫表,否則,用戶即使改變焦點到窗體中的其他部件,Dephi也不會投寄用戶對當前記錄的修改。Delphi在向數(shù)據(jù)庫表投寄TDBGrid部件中的被修改的記錄時,它會自動地檢查所有與當前數(shù)據(jù)庫相連的數(shù)據(jù)瀏覽部件的狀態(tài),只要其中有任何一數(shù)據(jù)瀏覽部件正在修改數(shù)據(jù),這時會彈出出錯信息,并且當前記錄的修改不會被投寄(即被寫回磁盤上的數(shù)據(jù)庫表)。</p>
<p> </p>
<p>16.4.2 TDBGrid部件的事件及應用</p>
<p> </p>
<p>TDBGrid部件在具有很多重要屬性的同時,Delphi也為它賦予了一些事件,以用于控制用戶在TDBGrid部件中的操作,我們通過為其中的一些事件編寫處理程序,可以有效地控制TDBGrid部件的行為。因為在TDBGrid部件中一次是顯示多條記錄和記錄中的多個字段,也許在實際應用中,不同的用戶各有自己特殊的需要,如只想改變其中某一列的值或者控制用戶每次只能進出網(wǎng)格中指定的列等等。表16.7列出了TDBGrid部件的主要事件及目的用途。</p>
<p> </p>
<p>表16.7 TDBGrid部件中的主要事件</p>
<p>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</p>
<p>事 件 名 目 的 用 途</p>
<p>────────────────────────────────</p>
<p>OnColEntor 當用戶進入網(wǎng)格各列時,觸發(fā)該事件</p>
<p>OnColExit 當用戶離開網(wǎng)格各列時,觸發(fā)該事件</p>
<p>OnDblClick 當用戶在網(wǎng)格中雙擊鼠標左鍵時,觸發(fā)該事件</p>
<p>OnDragDrop 當用戶在網(wǎng)格中用鼠標進行拖放操作時,觸發(fā)該事件</p>
<p>OnDragOver 當用戶在網(wǎng)格中用鼠標拖動網(wǎng)格時,觸發(fā)該事件</p>
<p>OnDrawDataCell 用于定制繪制網(wǎng)格中各網(wǎng)格單元,當向網(wǎng)格中填充數(shù)</p>
<p>據(jù)時觸發(fā)該事件</p>
<p>OnEndDrag 當用戶停止拖動網(wǎng)格時,觸發(fā)該事件</p>
<p>OnEnter 當網(wǎng)格獲得焦點時,觸發(fā)該事件</p>
<p>OnExit 當網(wǎng)格失去焦點時,觸發(fā)該事件</p>
<p>OnKeyDown 當用戶在網(wǎng)格中按下任何鍵或組合鍵時,觸發(fā)該事件</p>
<p>OnKeyPress 當用戶在網(wǎng)格中按了任何一個數(shù)字鍵或字母鍵時,觸</p>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -