一。表格(grid):表格類似于一個瀏覽器,是按行和列操作和顯示的容器,類似于我們在第二章中使用browse命令彈出的browse窗口。在實際應用中,可用表格來瀏覽或編輯表文件記錄內(nèi)容。若瀏覽或編輯表中的記錄,須在主程序中打開表文件。用表格顯示記錄時,表格的每一行顯示一條記錄,每列顯示一個字段。運行時,在表格中通常使用鼠標的單擊定位,然后可對選擇的內(nèi)容進行編輯或修改,修改后的內(nèi)容自動存到表文件中。如果表格的寬度不足以顯示全部字段,可用鼠標拖動表格下面的滾動條或單擊表格下面的左右箭頭進行調(diào)整。
一個表格對象包含一個表頭(header)對象和一個或多個列數(shù)據(jù)操作對象。表頭對象用于列的標題的顯示內(nèi)容和格式。數(shù)據(jù)操作對象是對列數(shù)據(jù)進行操作時所選用的控件。在設(shè)計階段,系統(tǒng)自動加入一個文本框?qū)ο笞鳛榱袛?shù)據(jù)操作對象,用戶可加入其他控件對象。例如,某列對象與表中的邏輯型字段綁定,如在該列中以檢查框的形式編輯和顯示,則應在該列中加入一個檢查框(check)控件。一個列中如有一個以上的數(shù)據(jù)操作對象,則應設(shè)置列對象的 currentcontrol屬性確定當前使用哪一個。
二。表格的常用屬性如下:
屬性 | 作用 |
columncount | 列數(shù).如columncount為-1,運行時表格將具有和記錄源中字段一樣多的列 |
deletemark | 是否具有刪除標記 |
recordsourcetype | 表格中顯示記錄的類型(記錄源類型).參數(shù)如下:0-表,1-別名, 2-查詢(.qpr),3-提示,4-sql說明 |
recordsource | 對應recordsourcetype的名稱(記錄源) |
childorder | 與父表主關(guān)鍵字相連的子表中的外部關(guān)鍵字 |
linkmaster | 表格中顯示子表的父表. |
三.表格常用的方法:
方法 | 作用 |
activecell(行,列) | 激活指定單元格 |
addcolumn(列號) | 在指定位置添加一列,但columncount屬性值不變 |
addobject | 在列中添加對象 |
屬性 | 作用 |
controlsource | 列控制源 |
currentcontrol | 列接收和顯示數(shù)據(jù)使用的控件 |
sparse | currentcontrol指定的控件是否影響整個列 .T.--只有在列中的活動單元格才以currentcontrol指定的控件接收和顯示數(shù)據(jù),其他單元格用文本框顯示. .F.--列中所有單元格均以currentcontrol指定的控件顯示數(shù)據(jù),活動單元格接收數(shù)據(jù) |
說明:列還可用inputmark,format和alignment等屬性控制數(shù)據(jù)的輸入內(nèi)容、顯示格式和對齊方式。如要進行有條件的格式編排,可使用一組動態(tài)格式設(shè)置屬性。例如,Dynamicfontname、Dynamicfontsize、Dynamicforecolor設(shè)置動態(tài)字體,字號和顏色。
五.表頭對象常用屬性:
屬性 | 作用 |
caption | 列標題文本 |
alignment | 列標題文本的對齊方式 |
在表格中不僅能顯示字段數(shù)據(jù),還可以在表格的列中嵌入文本框、復選框、下拉列表框、微調(diào)按鈕及其他控件。比如,假設(shè)表中有一個邏輯型字段,當運行表單時,使用復選框顯示其記錄值"真"或"假"(.T.或。F.), 比使用文本框更加直觀,修改這些字段的值只需設(shè)置或清除復選框即可。
六。表格中列的選擇:
1.選擇表格,右擊表格,在菜單中選擇"編輯",此時表格進入編輯狀態(tài)
2.在表格的編輯狀態(tài)下,單擊列的表頭區(qū)即選擇列的表頭對象,若單擊列的非表頭區(qū)則選擇該列。
3.可設(shè)置列的controlsource屬性為表中的相應字段名。
七。表格中列的增刪及移動:
在表格的編輯狀態(tài)下,按Delete鍵即刪除該列。列刪除后,表格的columncount屬性值會自動減一。
八。在表格中增加列:選中表格,在"屬性"窗口中,改變表格的columncount屬性值即可。
九。在表格的列中增加控件:
1.右擊表格,選菜單中的"編輯"命令,使表格進入編輯狀態(tài)。
2.在表格的編輯狀態(tài)下,點擊表格中某一列的非表頭區(qū),即選擇了該列
3.選"表單控件工具"欄中的某一個控件,然后單擊該列對象,即將該控件加入到該列中。
十二。設(shè)置表格的記錄源: 如果需要在表格中顯示或修改表文件的內(nèi)容,必須在設(shè)計時為表格指定數(shù)據(jù)源,方法如下:選擇表格,然后在"屬性"窗口中選擇 recordsourcetype屬性。如果我們將表格的recordsourcetype屬性設(shè)為"1-別名",然后選擇recordsource屬性,輸入一個表文件名作為屬性值,則在包含該表格的程序運行時,該表文件自動打開,其中的記錄顯示在表格中。
十三。設(shè)置列數(shù)據(jù)源:如果在列中顯示一個指定的字段,則可為該列單獨設(shè)置數(shù)據(jù)源。首先,右擊表格,選"編輯"命令,然后單擊選中要設(shè)置數(shù)據(jù)源的列,在"屬性"窗口中將其controlsource屬性設(shè)置為相應的字段名。
十四。添加記錄:表格(grid)控件有一個非常重要的屬性:Allowaddnew.在設(shè)計階段,如果我們將表格的allowaddnew屬性設(shè)為。T.,則在運行時,當用戶選中了表格中顯示的一條記錄,并且按一下向下的方向鍵,則在作為表格數(shù)據(jù)源的表文件中就會添加一條空白記錄。如在程序代碼中使用append blank或insert等命令來添加新記錄,則應將表格的allowaddnew屬性設(shè)為。F
2.沒有數(shù)據(jù)環(huán)境的一對多表單:
(1).在表單中加入若干個文本框,分別設(shè)置文本框的controlsource屬性為主表的相應字段。
(2).在表單中添加一個表格,將表格的recordsource屬性設(shè)置為相關(guān)表(子表)的名稱。
(3).設(shè)置表格的linkmaster屬性為主表的名稱。
(4).設(shè)置表格的childorder屬性為相關(guān)表中索引標識的名稱,索引標識名和主表中的關(guān)系表達式相對應。
(5).將表格的relationespr屬性設(shè)為聯(lián)接相關(guān)表和主表的表達式。例如:如果childorder標識以"KHXM"建立的索引,應將relationexpr也設(shè)置為相同的表達式。
十五。表格生成器:
1. 右擊表單上的表格控件,在快捷菜單中選"生成器"命令,可以啟動"表格生成器".
2.在"表格生成器"的"表格項"選項卡中,可以在"數(shù)據(jù)庫和表"列表中選擇一個默認目錄中的數(shù)據(jù)庫或表;若想打開其他目錄中的數(shù)據(jù)庫或表,可單擊該列表框右側(cè)的"…",在彈出的"打開"對話框中選擇一個表打開。打開表后,VFP會自動將其所有字段放入"表格項"選項卡的"可用字段"列表中,用戶可以選擇所需字段添加到"選定字段"列表中。使用其中的雙箭頭按鈕可將所有可用字段一次全部添加到選定字段列表中。如圖43
3.在"樣式"選項卡中,VFP提供了5種樣式,其默認值為"保留當前樣式",另外4種樣式為專業(yè)式,標準式,浮雕式和賬務式,當選擇其中一項時,在對話框左側(cè)會預覽出其效果。如圖44
4.在"布局"選項卡中,可以調(diào)整和設(shè)置行與列。拖動列標題的右邊線可調(diào)整列寬;拖動行的下邊線可調(diào)整行高;在"標題"文本框"中可為列設(shè)置其caption(標題)屬性;在"控件類型"列表框中可改變列的控件類型。如圖45
十六。例:按性別和職稱過濾編輯"職工檔案"表的數(shù)據(jù)
1.新建一個表單,將其caption屬性設(shè)為"表格的應用",autocenter設(shè)為。T.
2.向表單中添2個label控件,將它們的caption屬性分別設(shè)為"性別"和"職稱",然后向兩個label控件后分別添加兩個組合框控件combo1和combo2,如圖46
拖動"職工檔案。DBF"的標題欄到表單空白處,即自動生成一個表格。注意:此處一定要拖動數(shù)據(jù)環(huán)境中表的標題欄,如果拖動的是表中的字段,則在表單上生成的是文本框和標簽。
5.在表單中適當調(diào)整表格的大小,并將該表格的name屬性改為grid1(為了在程序代碼中引用方便),調(diào)整后的界面如圖48
6.選中組合框combo1,在"屬性"窗口中將其rowsourcetype屬性改為"1--值",再選中rowsource屬性,在上方文本框中輸入值:"男,女",如圖49.
同樣方法,將combo2的rowsourcetype屬性設(shè)為"1--值",將rowsource屬性設(shè)為"教授,講師,副教授".注意:輸入rowsource屬性值時,逗號分隔的是要在組合框中顯示的每一個選項,且必須用英文標點。
7.編寫代碼:
*combo1的interactivechange事件(用鼠標選擇列表項時產(chǎn)生的事件)代碼:
set filter to 職工檔案。性別=alltrim(thisform.combo1.value)
thisform.grid1.refresh
*combo的interactivechange事件代碼:
set filter to 職工檔案。職稱=alltrim(thisform.combo2.value)
thisform.grid1.refresh
8.保存并運行表單,可發(fā)現(xiàn),當我們在組合框中選擇時,比如我們在combo1中選擇了"男",則在表格中就將"職工檔案。DBF"中的男性記錄列出來。
9.分析:此例中,從數(shù)據(jù)環(huán)境中拖動所需的表到表單上,即自動生成表格,且該表格的rowsourcetype和rowsource等屬性都不必再設(shè)置, 系統(tǒng)自動將其recordsourcetype和recordsource屬性設(shè)置為生成這個表格的表文件"職工檔案。DBF