电竞比分网-中国电竞赛事及体育赛事平台

分享

Vfp中Grid的使用技巧

 踏雪_尋梅 2010-11-24

 

Vfp中Grid的使用技巧

 

1.如何在GRID里控制回車事件 

在VFP里,GRID的默認(rèn)控件都是TEXTBOX,形成了一個(gè)表格,但是在這個(gè)二維表里進(jìn)行操作時(shí),每次按回車都是往后一個(gè)單元格跳轉(zhuǎn),當(dāng)?shù)阶詈笠涣袝r(shí),則繼續(xù)跳到第一列,進(jìn)而循環(huán),操作很不方便。
    下面說(shuō)明如何在GRID里的一個(gè)列里按回車使記錄連續(xù)往下跳轉(zhuǎn)(或可以執(zhí)行其他的操作),當(dāng)跳轉(zhuǎn)到最后一行時(shí)執(zhí)行另一個(gè)操作。
1、對(duì)GRID所在的表單新增屬性:
cur_recn 記錄當(dāng)前記錄號(hào)
cur_recc 記錄最大記錄號(hào)
2、在表單初始化,或給GRID以數(shù)據(jù)源時(shí),就先計(jì)算出該表的最大的記錄數(shù),如下:
thisform.cur_recc=recc()
為了一次得到當(dāng)前GRID里的表的記錄總數(shù)
3、在GRID的AfterRowColChange事件里寫:
thisform.cur_recn=recn()
為了得到當(dāng)前的GRID里的表的記錄號(hào)
4、在GRID里的某列的TEXT1的KEYPRESS事件里:
if nKeyCode = 13 && 當(dāng)按鍵為回車時(shí)
 if thisform.cur_recn>=thisform.cur_recc 
 **-- 當(dāng)當(dāng)前記錄大于等于最大記錄時(shí),即記錄已到最后一個(gè)時(shí)
  thisform.command1.setfocus 
 **-- 使表單上的一個(gè)命令按紐聚焦,也即可以跳出該GRID,
 **-- 而正常的操作很難從GRID里跳出,在這里就可以使在記錄到最后時(shí)焦點(diǎn)跳出來(lái)
 else
  thisform.cur_recn=recn() && 當(dāng)記錄還沒(méi)到尾時(shí),則...
  nodefault && 不做任何響應(yīng)
  keyboard "{dnarrow}" && 模擬鍵盤下箭頭,使記錄指針下移一個(gè)
 endif
endif
以上所說(shuō)的,只要按鍵盤上的上下箭頭即可輕易做到在GRID中移動(dòng)指針,沒(méi)有太大的意義。

2.如何實(shí)現(xiàn)輸完數(shù)據(jù)后按回車鍵,使表格中的焦點(diǎn)自動(dòng)跳到下一行

在你要判斷轉(zhuǎn)換的GRID的最后一列的TEXT1的keypress:
IF  nKeyCode=13   
         SELECT  你綁定表名
         nRec=RECNO()  
         SKIP
         IF EOF()
            APPEND BLANK  &&在表尾加一空記錄
            SKIP  &&記錄指針到EOF()
            Thisform.grid1.refresh
            Thisform.grid1.column1.text1.SetFocus &&到最前面
         ELSE
             GO nRec  &&同一行,不要此就跳下一格
             Thisform.grid1.refresh
             Thisform.grid1.column1.text1.SetFocus      
         ENDIF
      ENDIF

以上代碼未經(jīng)過(guò)試驗(yàn),等待ing

Thisform.grid1.recordsuore=Null是什么意思?

Thisform.grid1.recordsuore=Null 與Thisform.grid1.recordsuore=''是不是一樣的?

null是不等于'',但在上面例子中的結(jié)果是一樣的。

NULL值不是空值,也不是零值,而是未知的、不可預(yù)測(cè)的值。在數(shù)據(jù)庫(kù)中,一旦將某字段設(shè)為Not Null 則用戶必須錄入數(shù)據(jù),否則不允許數(shù)據(jù)庫(kù)更新。

3.我怎樣才能把網(wǎng)格中的文本控件替換為其它控件?(可參照收費(fèi)管理系統(tǒng))

首先,先把原來(lái)的文本框控件刪除。

1)在您要修改的網(wǎng)格上按下鼠標(biāo)右鍵,選擇彈出菜單中的“屬性....”

2)在彈出的屬性對(duì)話框頂端的列舉框中選擇要替換文本框的column下的text1。

3)在網(wǎng)格上按一下鼠標(biāo)左鍵。

4)按下鍵盤上的DELETE按鍵,刪除Text1控件(網(wǎng)格上的ab1將會(huì)消失)。

其次,在網(wǎng)格上添置控件。

1)在您要修改的網(wǎng)格上按下鼠標(biāo)右鍵,選擇彈出菜單中的“編輯....”

2)按一下表單控件工具欄上您要加到網(wǎng)格上的控件。

3)在您要添置控件的column上按下鼠標(biāo)左鍵,并放置控件。

Grid模擬Browse窗口

可以將Grid結(jié)合在Form對(duì)象中,模擬成一個(gè)Browse命令窗口,當(dāng)自由調(diào)整Form大小時(shí),Grid對(duì)象也會(huì)自動(dòng)調(diào)整大小。實(shí)現(xiàn)方法如下:

1.首先設(shè)定一個(gè)Form對(duì)象,該對(duì)象必須保留其BorderStyle屬性為“3-可調(diào)邊框”,即設(shè)為可自由調(diào)整大小的邊線屬性;同時(shí)設(shè)定Resize事件如下:

Thisform.Grid1.Width=this.Width

Thisform.Grid1.Height=this.Height

2.設(shè)計(jì)一個(gè)Grid對(duì)象于Form對(duì)象中,并設(shè)定其屬性如下:

RecordSource為目前“數(shù)據(jù)環(huán)境”中所設(shè)定的工作區(qū)別名;

Top與Left均設(shè)為0,表示該對(duì)象左上端坐標(biāo)為(0,0);

Width的值設(shè)為Thisform.Width;

Height的值設(shè)為Thisform.Height。

這樣,已經(jīng)設(shè)定好的Grid對(duì)象便可以和Browse窗口相關(guān)聯(lián),當(dāng)對(duì)Form對(duì)象進(jìn)行大小調(diào)整時(shí),Grid對(duì)象的高度與寬度就可以隨之調(diào)整了。

4.表格GIRD的數(shù)據(jù)源表刪除數(shù)據(jù)或變動(dòng)后,表格會(huì)顯示空白?

thisform.grid1.RecordSource = null
SELECT yea,mon,jcgz1,gwgz1,ren1,jcgz2,gwgz2,ren2,dqgz,dqren,ntgz,ntren,txgz,txren;
 FROM gzhz WHERE danwei = this.value AND yea = thisform.cboyea.Value ;
 INTO dbf dwgz ORDER BY mon
thisform.grid1.RecordSource = 'dwgz'
其實(shí)就是:

先hsiform.grid1.recordsource = null

經(jīng)過(guò)表操作(刪除、變動(dòng)等)

后hisform.grid1.recordsource ='dbfname'

5.關(guān)于Grid的綁定數(shù)據(jù)源問(wèn)題(用臨時(shí)表綁定)

thisform.grid1.recordsource=""
SELECT 學(xué)號(hào),姓名 FROM tblStudent INTO CURSOR temporary
           thisform.grid1.recordsource="temporary"
           thisform.grid1.refresh()

具體解釋如下:

thisform.grid1.recordsource=""
這一行的目的是讓grid1在整個(gè)
SELECT 學(xué)號(hào),姓名 FROM tblStudent INTO CURSOR temporary
期間不隨temporary表的變化而變化,INTO CURSOR temporary實(shí)際上有多個(gè)動(dòng)作,
先清除原臨時(shí)表temporary,再生成新的temporary表,
thisform.grid1.recordsource=""這行的目的是讓GRID1在全過(guò)程中和臨時(shí)表temporary斷開(kāi),不受它的影響.
當(dāng)全部操作完后再用
thisform.grid1.recordsource="temporary"
連接上去,最好在這句前加上一句,
select temporary
go top
這樣如果temporary有多條記錄的話不會(huì)出現(xiàn)指針在末尾而看不到第一條記錄的情況(不好看),
thisform.grid1.refresh()這句基本上可以不要的,在大多數(shù)情況下不會(huì)出錯(cuò),只有在查詢后緊跟其它對(duì)grid1數(shù)據(jù)集調(diào)用指令的會(huì)出錯(cuò).

6.grid控件的使用技巧(應(yīng)用setall()方法統(tǒng)一設(shè)置)

(1)禁止用戶用鼠標(biāo)去調(diào)整各個(gè)column的位置順序
在grid的init事件程序中輸入以下代碼:
this.setall("movable",.f.,"column")
(2)禁止用戶用鼠標(biāo)去調(diào)整各個(gè)column的寬度
在grid的init事件程序中輸入以下代碼:
this.setall("rsizable",.f.,"column")
(3)使grid中各個(gè)column的標(biāo)題文字自動(dòng)居中
在grid的init事件程序中輸入以下代碼:
this.setall("alignment",2,"header")
(4)建立求平均欄
  假設(shè)一個(gè)存放了成績(jī)數(shù)據(jù)表(包括:姓名、語(yǔ)文、數(shù)學(xué)、政治字段),欲在grid中增加一個(gè)“平均分”直欄,只需將grid的columncount屬性加1,然后將“平均分”欄的controlsource屬性設(shè)為如下:
controlsource=(語(yǔ)文+數(shù)學(xué)+政治)/3
(5)根據(jù)用戶選定的column進(jìn)行排序
有時(shí)希望單擊column的標(biāo)題,就以此column的字段進(jìn)行排序顯示記錄。我們可以在各個(gè)column的header對(duì)象的click事件中,將數(shù)據(jù)環(huán)境中的cursor對(duì)象的order屬性設(shè)定成根據(jù)這個(gè)column的字段建立的索引名稱,然后再調(diào)用grid的refresh方法即可。例如:

thisform.dataenvironmnet.cursor1.order="姓名"
thisform.grid1.refresh
(6) Grid對(duì)象中焦點(diǎn)行的動(dòng)態(tài)顯示   

Grid對(duì)象中當(dāng)數(shù)據(jù)記錄移動(dòng)時(shí),用顏色動(dòng)態(tài)變化顯示相對(duì)光標(biāo)所在記錄的位置,可以在Grid對(duì)象的afterRowColChange事件過(guò)程中加入如下內(nèi)容:
this.setall(“dynamicbackcolor”,“iif(this.activerow=recno(),rgb(0,0,255),rgb(255,255,255))”,“column”)。

(7)在網(wǎng)格中交替顯示顏色

  記錄號(hào)有序排列時(shí),可以在網(wǎng)格的列中交替顯示白色和灰色的記錄,代碼如下:

thisform.Grid1.SetAll("DynamicBackColor","IIF(MOD(RECNO(),2)=0,RGB(255,255,255),RGB(192,192,192))","Column")&&交替顯示白色和綠色的記錄

(8) 符合條件的記錄顯示顏色

進(jìn)行查詢時(shí),想在網(wǎng)格中動(dòng)態(tài)地顯示符合條件的記錄的顏色,可以充分利用DynamicBackColor和DynamicForeColor特性。下例將符合條件的記錄的字體變?yōu)榧t色Thisform.Grid1.Column1.DynamicForeColor="IIf(Database.Category_ID='A02',RGB(225,0,0),RGB(0,0,124))"

例如:在《宅基地管理系統(tǒng)》中,使被注、撤銷的記錄呈現(xiàn)紅色,可在grid1的init事件和afterrowcolchange中添加下列代碼:(注意:經(jīng)過(guò)實(shí)驗(yàn),加不加"column"都可以)

thisform.Grid1.SetAll("DynamicforeColor","IIF(是否被注(撤)銷='是',rgb(255,0,0),rgb(0,0,0))") &&使被注撤銷的記錄顯紅色

(9設(shè)置多種顏色(無(wú)規(guī)律性)

主要是針對(duì)一個(gè)表GRID里,當(dāng)記錄很多時(shí),而且某些記錄具有特定的屬性時(shí),我們需要設(shè)置顏色來(lái)區(qū)分這些數(shù)據(jù),如下代碼可以在刷新或初始化表單時(shí),設(shè)置其屬性。注意:經(jīng)過(guò)實(shí)驗(yàn),加不加,"column"都可以)

thisform.Grid1.SetAll("DynamicBackColor","IIF(type>=1,iif(type>=2,iif(type>=3,rgb(0,128,0),rgb(192,192,192)),rgb(255,0,0)),rgb(255,255,255))")

如上代碼可以說(shuō)明,如果某記錄中有一個(gè)字段type,那么根據(jù)這個(gè)字段的數(shù)據(jù)值,可以顯示不同顏色,可以轉(zhuǎn)換成如下公式:

iif(條件1,iif(條件2,iif(條件3,iif(條件4,iif(條件5,[...iif(條件N,顏色N,顏色n-1)...,]顏色5,顏色4),顏色3),顏色2),顏色1),其他顏色)

(10用SetAll方法。例如,你決定為全部網(wǎng)格中的標(biāo)題設(shè)置9號(hào)宋體。將以下代碼放入網(wǎng)格的Init事件: THIS.SETALL("FontName","Arial","Header")

7..怎么才能讓grid的光標(biāo)自動(dòng)移動(dòng)到要編輯記錄上?

如grid顯示的表為aa

aa記錄有:

學(xué)號(hào)         姓名

001         王一

002         王二

003         王三

。。。。。。

240         王動(dòng)

。。。。。。 

在表單textbox中輸入"240"后,讓光標(biāo)自動(dòng)到學(xué)號(hào)為“240”的記錄(且grid能夠自動(dòng)滾動(dòng)到此記錄顯示-------)

在cmdGo的click事件中,用以下代碼:

sele aa

loca 學(xué)號(hào)=thisform.textbox.value

thisform.grid.setfocus

 

8、我怎樣才能把網(wǎng)格中的文本控件替換為其它控件?

  答:首先,先把原來(lái)的文本框控件刪除。

  1:在您要修改的網(wǎng)格上按下鼠標(biāo)右鍵,選擇彈出菜單中的“屬性....”

  2:在彈出的屬性對(duì)話框頂端的列舉框中選擇要替換文本框的column下的text1。

  3:在網(wǎng)格上按一下鼠標(biāo)左鍵。

  4:按下鍵盤上的DELETE按鍵,刪除Text1控件(網(wǎng)格上的ab1將會(huì)消失)。

  其次,在網(wǎng)格上添置控件。

  1:在您要修改的網(wǎng)格上按下鼠標(biāo)右鍵,選擇彈出菜單中的“編輯....”

  2:按一下表單控件工具欄上您要加到網(wǎng)格上的控件。

  3:在您要添置控件的column上按下鼠標(biāo)左鍵,并放置控件。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多