




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、pb中datawindow常用技巧一(2009-04-16 17:09:07) 轉(zhuǎn)載標(biāo)簽: 雜談分類: PowerBuilder pb中datawindow常用技巧一1、如何讓存儲文件目錄的列,顯示圖片?答:選擇對應(yīng)的column的display as picture屬性為true2、如何復(fù)制grid類型的所選擇的行的數(shù)據(jù)到系統(tǒng)剪切板?答:string ls_selectedls_selected=dw_1.Object.DataWindow.Selected.Dataclipbord(ls_selected)4、如何設(shè)置的DW底色?在DW的editsource中改變color的值5、如何將G
2、rid風(fēng)格改成自由格式?在DW的editsource中將processing=1的1改為06、要新建一個表A但風(fēng)格和現(xiàn)有表格B風(fēng)格一樣,怎么將A表快速設(shè)置成表B風(fēng)格?復(fù)制B表C,在C表的DW中的editsource中將表名和字段名改成A表的,即可7、如何實現(xiàn)gird風(fēng)格的datawindow的多欄表頭?答:添加 text到header帶區(qū),并設(shè)置band屬性為foreground保存,edit source 修改text的x和width屬性表達(dá)式如下:x="100t integer(describe('firstcol.x')" width="10
3、0tinteger(describe('lastcol.x') - integer(describe('firstcol.x') +integer(describe('lastcol.width')8、如何過濾dddw編輯風(fēng)格的顯示值為指定值的記錄?答:dw_1.setfilter("lookupdisplay('column_name')='"+ls_display_value_your+"'")dw_1.filter()9、如何設(shè)置datawindow的某一列為空?答:s
4、tring ls_tempsetnull(ls_temp)dw_1.object.columnname.primary.current=ls_temp10、如何設(shè)置datawindow的單雙行不同顏色間隔?答:在detail帶區(qū)的color屬性表達(dá)式中寫上if(mod (getrow(),2)=1 ,rgb(255,0,0),rgb(0,255,0),如果是當(dāng)前行以第三種顏色表示,表達(dá)式如下:if(getrow()=current(), rgb(255,0,0),if(mod(getrow(),2)=1 ,rgb(0,0,255),rgb(0,255,0)11、如何獲取指定名稱的datawin
5、dowobject?答:DWObject ldwo_use,ldwo_abc ldwo_use = dw_1.Object ldwo_abc = ldwo_use._get_attribute("t_1",FALSE)/t_1為datawindow中text對象的名稱12、如何縮放datawindow的打印大小?答:dw_1.object.datawindow.zoom=150 or dw_1.object.datawindow.zoom=7513、如何在已過濾后的數(shù)據(jù)基礎(chǔ)上對datawindow進(jìn)行過濾?答:dw_1.setfilter(dw_1.describe(&qu
6、ot;datawindow.table.filter")+your_join+your_new_filter)dw_1.filter()14、如何在datawindow中顯示動態(tài)時間?答:建立一個計算域,表達(dá)式為string(datetime(today(),now(),'yyyy年mm月dd日 hh點mm分ss秒'),同時設(shè)置datawindow的屬性dw_1.Object.DataWindow.Timer_Interval=50015、如何讓帶用title bar的datawindow控件的標(biāo)題欄誠活動窗口的顏色?答:外部函數(shù)定義:funcation logn S
7、etActiveWindow(long hwnd ) Library "user32.dll"datawindow控件的clicked事件代碼:setactivewindow(handle(this)16、如何設(shè)置datawindow的當(dāng)前行指示圖標(biāo)?答:在datawindow中建立一個計算列,expression為'',并將該計算列移動為datawindow的第一個列,在datawindow控件的rowfocuschanged事件中寫入代碼:SetRowFocusIndicator(hand!)或setrowfucsindicator(p_1)/p_1為窗
8、口上的picture控件名17、如何通過代碼打開dddw?答:定義外部函數(shù)引用聲明SUBROUTINE keybd_event( int bVk, int bScan, int dwFlags, int dwExtraInfo) LIBRARY "user32.dll"代碼如下: constant integer VK_F4 = 115dw_1.SetFocus()dw_1.SetColumn( "dept_head_id" ) /設(shè)置當(dāng)前dddwkeybd_event( VK_F4,0,0,0 ) / 按下F4鍵keybd_event( VK_F4,0
9、,2,0 ) / 釋放F4鍵18、如何打印datawindow的內(nèi)容到文件中?答: dw_1.object.datawindow.print.fileName ="c:temp.prn"dw_1.print()19、如何設(shè)置dddw的初始值?答:dw_1.object.columnname.Initial="your_initial_value"20、如何只顯示不同的數(shù)據(jù)?答:dw_1.filter("isnull(columnname-1) and columnname<>columnname-1")dw_1.filte
10、r()21、如何讓帶有title bar的datawindow不可以移動?答:在datawindow的自定義事件ue_nchittest(pbm_nchittest)中寫入如下代碼:return 122、如何在N-UP顯示風(fēng)格中建立基于第N欄中的列的計算列?答:如column有兩列,number和price ,并顯示為兩欄,則第一欄的cost計算列的expression為number*price,第二欄的cost_1計算列的expression為number1*price123、如何清空ddlb或edit.codetable中項目?答:dw_1.Object.columnname.Values
11、=""24、如何實現(xiàn)指定的column的字體旋轉(zhuǎn)90度?答:dw_1.object.columnname.font.Escapement ="900"25、如何獲取datawindow的sql代碼?答: 可以通過以下四種方法獲取sql代碼:string szselectszselect=dw_1.describe("datawindow.table.select")szselect=dw_1.describe("datawindow.table.sqlselect")szselect=dw_1.describe(&
12、quot;datawindow.table.select.attribute")szselect=dw_1.getsqlselect()27、如何獲取datawindow對象占有的虛擬存儲的容量?答:使用datawindow.storage屬性舉例:在datawindow控件的retrieverow事件中,寫如如下代碼:long lstoragelstorage=long(dw_1.object.datawindow.storage)if lstorage>50000 then dbcancel()28、如何連續(xù)在同一張紙打印兩個數(shù)據(jù)窗口?答:dw_1.object.dataw
13、indow.print.filename="temp.prn"dw_2.object.datawindow.print.filename="temp.prn"dw_1.print()dw_2.print()29、如何設(shè)置datawindow分組后每個分組中的記錄號?答:建立一個計算列,expression為 getrow() - first(getrow() for group 1)+130、如何實現(xiàn)在datawindow中只有新增的行,才可以編輯?答:在所有的column的protect屬性表達(dá)式中寫入以下表達(dá)式:if(isrownew(),'
14、0','1')31、除了循環(huán)以外,有沒有更好的方法統(tǒng)計數(shù)據(jù)窗口中處于選中狀態(tài)的行數(shù)?一般習(xí)慣于使用循環(huán)來統(tǒng)計數(shù)據(jù)窗口中處于選中狀態(tài)的行數(shù),有沒有更好的方法?其實此問題在應(yīng)用上用處不大,討論一下,活躍一下思維還是有好處的。方法一: long ll_Selected ll_Selected = long(dw_1.describe("evaluate('sum( if(IsSelected(), 1, 0) for all)',1)")方法二: long ll_Selected ll_Selected = long(dw_1.descri
15、be("evaluate('count(IsSelected() for all)',1)")方法三:upperbound(dw_1.Object.Data.Selected)32、問:怎么讓PB只打印當(dāng)前記錄,是用Free格式制作的數(shù)據(jù)窗口!-答:DataStore ldt_templong ll_Row , ll_Rowsll_Rows = dw_XX.Rowcount()If ll_Rows = 0 Then GoTo the_endIf ll_Rows = 1 Thendw_XX.Print()GoTo the_endEnd ifdw_XX.SetR
16、edraw(False)ldt_temp = Create DataStoreldt_temp.DataObject = dw_XX.DataObjectll_Row = dw_XX.GetRow()dw_XX.RowsMove(1 , ll_Rows , Primary! , ldt_temp , 1 , Primary!)ldt_temp.RowsMove(ll_Row , ll_Row , Primary! , dw_XX , 1 , Primary!)dw_XX.Print()dw_XX.RowsMove(1 , 1 , Primary! , ldt_temp , ll_Row , P
17、rimary!)ldt_temp.RowsMove(1 , ll_Rows , Primary! , dw_XX , 1 , Primary!)Destroy ldt_tempdw_XX.SetRedraw(True)the_end:/ 只用將上述腳本拷入到打印部分即可,dw_XX為被打印的free型數(shù)據(jù)窗口,該方法可保證dw_XX中的數(shù)據(jù)在打印前后包括sort等屬性均不發(fā)生任何改變,但效率較低,不宜用在數(shù)據(jù)量太大的數(shù)據(jù)窗口中,當(dāng)然,考慮到打印本身速度就比較慢,所以3000行數(shù)據(jù)是可以采用這種方法并讓用戶接受的。若在同一窗口上存在與dw_XX共享的grid數(shù)據(jù)窗口并且與dw_XX同時顯示,則需
18、要與dw_one一起SetRedraw()38、字段如何自動換行的同時且自動高度?答:將數(shù)據(jù)窗口中相應(yīng)列的auto horz scroll 為不選中,選中autosize height 將detail的autosize height選中。在數(shù)據(jù)窗口retrieve 后調(diào)用下面函數(shù)即可 uf_set_text(datawindow adw_content,string as_columns,boolean,ab_ignoreblank) if (not isvalid(adw_content) or isnull(as_columns) or len(as_columns)<1 or is
19、null(ab_ignoreblank) then return -1 n_cst_string lnv_string string ls_column , ls_width ,as_source,as_replaced ,ls_temp int li_upperbound , li_width , li_column , li_fontWidth, li_counter long ll_rowcount , ll_row , ll_totalstep int li_yield lnv_string.of_parsetoarray(as_columns,',',ls_colum
20、n) li_upperbound = upperbound(ls_column) ll_rowcount = adw_content.rowcount() if li_upperbound<1 or ll_rowcount<1 then return -1 openwithparm(w_waiting,this) ib_cancel = false iw_frame.enabled = false ll_totalstep = ll_rowcount * li_upperbound w_waiting.uf_register(ll_totalstep) for li_column
21、= 1 to li_upperbound ls_width = adw_content.describe(ls_columnli_column+".width") li_width = integer(ls_width) if ls_width='!' or ls_width='?' or li_width=0 then continue end if /ls_temp = adw_content.describe(ls_columnli_column+".Fperty = 'width' "
22、) /messagebox(ls_columnli_column+".Fperty = 'width' ",ls_temp) /return 1 li_fontwidth = 27 li_counter = li_width / li_fontWidth for ll_row=1 to ll_rowcount if ib_cancel then iw_frame.enabled = true return 0 /pressed cancel button end if as_source = adw_content.getitemstring(
23、ll_row,ls_columnli_column) as_replaced = uf_insertstring(as_source,li_counter,' ',false) if as_replaced<>as_source then adw_content.setitem(ll_row,ls_columnli_column,as_replaced) end if w_waiting.uf_stepit() next next close(w_waiting) iw_frame.enabled = true return 139、如何使dw的列不可移動,不可調(diào)整
24、列寬?答:在datawindow的cilcked事件寫 if row=0 then return 1 end if40.光標(biāo)跳轉(zhuǎn)到數(shù)據(jù)窗口的某一行某一列dw_1.scrolltorow(ll_row) dw_1.setcolumn(ll_column)41 如何使光標(biāo)指向每頁第一行?long ll_firstrowonpage=long(dw_1.describe("datawindow.firstrowonpage")dw_1.scrolltorow(ll_firstrowonpage)dw_1.setrow(ll_firstrowonpage)42. Grid的窗口如何
25、使第一列固定不動?選上data OBJECT的HSplitScroll屬性 在constructor事件中: dw_1.Object.DataWindow.HorizontalScrollSplit=integer(dw_1.describe("#1.width") /第一列的寬度 在scrollhorizontal事件中: int iif pane = 1 theni = integer(this.OBJECT.datawindow.horizontalscrollposition2)if i < 1 or isnull(i) then returnif scrol
26、lpos > 0 thenthis.OBJECT.datawindow.horizontalScrollPosition = 0end ifelsei = integer(this.Object.DataWindow.HorizontalScrollSplit)if i < 1 or isnull(i) then returnif i > scrollpos thenthis.OBJECT.datawindow.horizontalScrollPosition2 = iend ifend ifpb中datawindow常用技巧二(2009-04-16 17:11:40) 轉(zhuǎn)載
27、標(biāo)簽: 雜談分類: PowerBuilder 1 使DataWindow列只能追加不能修改如何使DataWindow中的數(shù)據(jù)只能追加新記錄而不能修改,利用 Column 的 Protect 屬性可以很方便的做到這一點,方法如下:將每一列的 Protect 屬性設(shè)置為:If( IsRowNew(), 0, 1) )在 PowerScript 中可以動態(tài)修改 Protect 屬性:dw_1.Modify("column_name_here.Protect='1tIf(IsRowNew(),0,1)'")這樣,DataWindow 中只有新追加的記錄可修改,而其他
28、記錄是只讀的。2 如何在DataWindow中實現(xiàn)列的自動折行我們在PowerBuilder應(yīng)用程序的開發(fā)過程中, 使用DataWindow時, 經(jīng)常會遇到某列的數(shù)據(jù)太長, 不能同時全部顯示的情況. 若采用自動水平滾動, 操作起來又不夠簡便. 下面介紹一種方法, 實現(xiàn)列數(shù)據(jù)多行顯示, 即實現(xiàn)列數(shù)據(jù)的自動折行.具體步驟如下:1) 在DataWindow Painter中打開此DataWindow.2) 在需設(shè)定自動折行的列上雙擊鼠標(biāo), 彈開此列的屬性窗口.3) 選擇Position標(biāo)簽, 選中Autosize Height 多選框.4) 選擇Edit標(biāo)簽, 不選中Auto Horz Scroll
29、多選框.5) 單擊OK按鈕, 保存所做的修改.6) 點中Detail Band (即寫有Detail的灰色長帶), 單擊鼠標(biāo)右鍵, 選擇Properties. 菜單項.7) 選中Autosize Height多選框.8) 單擊OK按鈕, 保存所做的修改.9) 保存此DataWindow.注意:連在一起的漢字(中間沒有標(biāo)點或空格分隔), 系統(tǒng)將認(rèn)為是一個單詞, 不會自動進(jìn)行折行. 3 在數(shù)據(jù)窗口中實現(xiàn)動畫要實現(xiàn)動畫,必須要有定時器,在數(shù)據(jù)窗口中已經(jīng)有了一個定時器,雙擊數(shù)據(jù)窗口將彈出的對話框,在TimerInterval中定義大于零的值就有定時器(可以精確到毫秒),有了這個定時器就可以實
30、現(xiàn)動畫了。比如要改變某字段的背景顏色,可設(shè)ackgound.color=RGB(Integer(Right(string(now(),'hhmmssf'),1)*256/10,Integer(Right(string(now(),'hhmmssf'),1)*256/10,0)當(dāng)然,您不僅可以改變背景顏色,而且可以改變字體等等任何屬性,使他可以動起來! 4 使數(shù)據(jù)窗口中的被選中行具有更好的外觀大家都知道,在選擇數(shù)據(jù)窗口中的某一行時,如果使用pb提供的選擇函數(shù)SelectRow(),那么的外觀真是不能恭維,單調(diào)而古板的藍(lán)色背景,可能和您的漂亮而生動的應(yīng)用程
31、序格格不入。有沒有辦法改變呢?當(dāng)然有啰,請聽我慢慢道來。改變某一行的背景比較簡單,改變每一列的背景屬性(backgroundcolor)即可,可要根據(jù)鼠標(biāo)選擇情況自動改變,并可以返回被選中的行可能還需要一定的技巧。下面分單行選擇和多行選擇分辨說明。單行選擇單行選擇比較簡單,我們只要將所有字段的背景色的表達(dá)式改為:if(GetRow()=CurrentRow(),RGB(255,126,0),RGB(0,0,0)其中第一個顏色為被選中的顏色,第二個顏色未被選中的顏色。然后用GetRow()代替GetSelectedRow()函數(shù)來得到被選中的行。 多行選擇多行選擇比較復(fù)雜,如果單純依靠
32、改變數(shù)據(jù)窗口的屬性沒法實現(xiàn),我們必須使用數(shù)據(jù)窗口屬性和代碼結(jié)合起來才能實現(xiàn) 首先,改變數(shù)據(jù)窗口的SQL語句,增加一個計算字段:0 asflag,Select 語句改為:Select col1,col2 ,1 as flag from tablename where .,當(dāng)返回數(shù)據(jù)窗口painter時,您就會發(fā)現(xiàn)多了一個字段flag,我們就是利用這個字段保存行被選中的信息。其次,修改各個字段的背景顏色屬性,設(shè)置為:if(flag=1,RGB(255,126,0),RGB(255,255,255)第三:在數(shù)據(jù)窗口控件中,增加對clicked 事件的處理,代碼如下:if row<1 then
33、return / setredraw(false)if this.o b j e c t.flagrow=1 then /如果該行被選中,撤銷選擇,否則選中該行this.Object.flagrow=0elsethis.Object.flagrow=1end ifsetredraw(true)您還可以定制本選中行的字體,文本屬性等等。原理相同,不再贅述。 5 將日期型字段初始化為當(dāng)天的日期 使用 Column Specifications 對話框來設(shè)置數(shù)據(jù)的初始值是一個比較好又比較通用的方法。為了將日期型字段初始化為當(dāng)天的日期,只要設(shè)置初始化值為today,而不是today()即可。
34、同樣設(shè)置初始值為NUll,可以使用null,而不是null()。 6 在DataWindow中調(diào)整列順序在 Gird 風(fēng)格的 DataWindow 中,列的排列順序是按照你選擇 Column 的順序排列的,并且不能改變.要改變列的順序則必須重新制作 DataWindow.最近我發(fā)現(xiàn)一個辦法可以改變列的順序: 在 DataWindow畫板中打開要修改的 DataWindow,然后按'Preview' 按鈕切換到預(yù)覽模式下,選擇要移動的列標(biāo)題并拖動到預(yù)定位置,然后返回 DataWindow 畫板,存盤即可. 7 Retrieve時不清除原有Datawindow數(shù)
35、據(jù)當(dāng)你調(diào)用Retrieve函數(shù),PowerBuilder自動清除原有DataWindow然后Retrieve數(shù)據(jù)。在Datawindow RetrieveStart事件中,使用Return 2,這樣PowerBuilder不會清除原有數(shù)據(jù)而是追加新數(shù)據(jù)。 8 美化DataWindow的顯示效果使DataWindow 的單雙行顯示顏色不同,不僅僅可以使你的應(yīng)用程序更顯專業(yè)性,并使數(shù)據(jù)的可讀性增強。先調(diào)出你需要改動的DataWindow,在Detail band按下右鍵選擇Properties,選擇Tab頁中的Expressions,在color屬性中輸入下面內(nèi)容:(注意是在Detail
36、明細(xì)顯示段按右鍵,而不是在Column上) IF(MOD(GETROW(),2)=0,RGB(192, 192,192), RGB(255, 255, 255) 馬上Preview一下,看一看效果如何。 9 用Line建立漂亮的Grid DataWindow的技巧雖然PowerBuilder有Grid風(fēng)格的DataWindow,但不夠靈活,如果想打印一張邊框粗線條或雙線,內(nèi)框為細(xì)線條的表格直接使用Grid 風(fēng) 格的DataWindow就不能實現(xiàn)。因此許多人都用Tabular風(fēng)格的DataWindow,然后自己用Line來實現(xiàn)Grid。在調(diào)整線條位置是一個即傷腦筋又傷眼睛的事件,而一旦
37、需要調(diào)整行高,所有工作都得重來,試一試用下面方法,會大大減輕你的工作量:在vertical lines,改變它的屬性,在ExpressionsTab上,y1行上輸入0,y2行上輸入rowheight() - 1 在horizontal lines, 設(shè)置 y1 和 y2 = rowheight() - 5 這樣PowerBuilder會自動調(diào)整線的坐標(biāo),你只需要設(shè)置橫線的長度和x1,x2的坐標(biāo)即可。 馬上Preview一下,看一看效果!你再也不需要因為行的高度發(fā)生改變而重新調(diào)整線條位置。 10 如何創(chuàng)建一個報表,如下形式Quantity Running Total5,000 5,00
38、02,500 7,5003,000 10,50012,000 22,500對于Running Total列,我們可使用計算列:CumulativeSum(Quantity for all),即可達(dá)到逐漸遞增求和的功能。11 數(shù)據(jù)窗口的數(shù)據(jù)送緩沖區(qū)之前確認(rèn)的四個步驟判斷數(shù)據(jù)類型是否正確。如不正確則觸發(fā)ItemError事件。判斷數(shù)據(jù)是否符合有效性規(guī)則。如不符合有效性規(guī)則,同樣觸發(fā)ItemError事件。判斷是否有數(shù)據(jù)被改動。判斷數(shù)據(jù)是否通過ItemChanged事件,如果數(shù)據(jù)和ItemChanged相斥,將觸發(fā)ItemError事件。12 如何在DataWindow中用數(shù)據(jù)類型為Datetime
39、的列為條件進(jìn)行查找1當(dāng)要查找的日期條件是一常數(shù)時使用如下表達(dá)式:ls_Find = "datetime_col = DateTime ('1/1/1999')"2當(dāng)要查找的日期條件是一個變量時使用如下的表達(dá)式:ls_Find = "datetime_col = DateTime ('" +ls_Date + "')"3當(dāng)要查找的日期條件是一個DateTime數(shù)據(jù)類型時使用如下表達(dá)式:ls_Find = "datetime_col = DateTime ('" +String
40、(ldt_DateTime) + "')"13 設(shè)置數(shù)據(jù)窗口Boolean型屬性的三種方法PowerBuilder提供了三種方法設(shè)置數(shù)據(jù)窗口的布爾型屬性,分別是True/False, 1/0, 'Yes'/'No'。例如:dw_1.Object.address.Visible = 0 dw_1.Object.address.Visible = Falsedw_1.Object.address.Visible = 'No'PowerBuilder在處理上以字符串的形式保存屬性,而不考慮屬性值是布爾型、長整型或是字符型。為
41、了進(jìn)一步理解,可以導(dǎo)出一個數(shù)據(jù)窗口并查看它的原碼,可以發(fā)現(xiàn)即使是列的顏色屬性它也是使用帶雙引號的數(shù)字來表達(dá)。14 如何在DataWindow中快速刪除多行在開發(fā)過程中可能經(jīng)常有要進(jìn)行多行刪除的操作,一般都使用循環(huán)語句進(jìn)行操作:FOR ll_RowOn = 1 TO dw_1.RowCount() dw_1.DeleteRow(ll_RowOn) NEXT一個快速的刪除方法是把要刪除的行從主緩沖區(qū)中移到刪除緩沖區(qū)中。例如,刪除緩沖區(qū)中所有的行:dw_1.RowsMove(dw_1, 1, dw_1.RowCount, Primary!, dw_1, 1, Delete!)不過不要忘了過濾的行在不
42、同的緩沖區(qū)中。15 如何在DataWindow的SQL語法中不使用SELECT DISTINCT實現(xiàn)刪除重復(fù)的行起先對你要顯示唯一值的列進(jìn)行排序:"city A",然后增加如下過濾字符串:" city < > city -1 or GetRow () = 1"16 如何在分組形式的DataWindow中分別顯示各組的行號當(dāng)我們?yōu)镈atawindow的每一行顯示行號時,可以簡單的放一個表達(dá)式為GetRow()計算列。但是對于分組的Datawindow,要分別顯示各組的行號,則應(yīng)使用表達(dá)式為GetRow() - First(GetRow() fo
43、r Group 1) + 1的計算列。17 如何改變列的字體顏色,提醒用戶此列已做修改在列的Color屬性中,輸入如下表達(dá)式IF (column_name < >column_name.Original, RGB(255, 0, 0), RGB(0, 0, 0)。在這個條件中,如果此列已改變,則顯示紅色字體,否則顯示黑色字體。這個表達(dá)式主要用column_name< > column_name.Original比較當(dāng)前列的值和原始列的值是否相同來達(dá)到判斷的目的。18 在數(shù)據(jù)窗口中移走行,但不是去做過濾或刪除操作RowsDiscard()函數(shù)可做到這一點,它在數(shù)據(jù)窗口中執(zhí)
44、行移除工作,但被移走的行它不可被刪除或做任何修改性的保存。 19 如何在多行顯示的DataWindow 中的FooterBand中顯示當(dāng)前數(shù)據(jù)的首行和最后行的行號我們先看兩個計算列的表達(dá)式: IF (GetRow() = First(GetRow() FORPage), 1, 0) / 1 為當(dāng)前頁的第一行IF (GetRow() < > 1 AND GetRow() = Last(GetRow() FOR Page), 1, 0) / 1 為當(dāng)前頁的最后一行由上面可知,在Footer Band中設(shè)置如下計算列表達(dá)式:'Rows ' + String(Fi
45、rst(GetRow() FOR Page) + ' to ' + String(Last(GetRow() FORPage) + ' are displayed'。即可達(dá)到這項功能。 20 使可編輯的數(shù)據(jù)窗口只讀有時,你可能需要將一個用于編程的數(shù)據(jù)窗口用作顯示目的,可以有以下幾種方法來實現(xiàn)這一要求:1.建立兩個數(shù)據(jù)窗口,一個用于編輯,一個用于顯示2.將數(shù)據(jù)窗口中的全部對象的taborder設(shè)置為0.3.也可以將數(shù)據(jù)窗口中的列的protect屬性設(shè)為On或Off,但你不能使用protect屬性進(jìn)行編輯操作4.數(shù)據(jù)窗口有一個將datawindow設(shè)為只讀
46、的屬性(readonly),使用它最方便。 21 數(shù)據(jù)窗口檢查重復(fù)行dw_1.SetSort ("user_id A")dw_1.Sort()dw_1.SetFilter ("user_id = user_id-1")dw_1.Filter()if dw_1.RowCount() > 0 then Messagebox("注意", "用戶編碼重復(fù).")end ifdw_1.SetFilter ("")dw_1.Filter() 22 如何在分組形式的Data
47、Window中分別顯示各組的行號- 當(dāng)我們?yōu)镈atawindow的每一行顯示行號時,可以簡單的放一個表達(dá)式為GetRow()- 計算列。但是對于分組的Datawindow,要分別顯示各組的行號,則應(yīng)使用表達(dá)式為GetRow() - First(GetRow() for Group 1) + 1的計算列。 23 如何能讓數(shù)據(jù)窗口的某幾列在其他列橫拉時固定不動 / 功能說明:用于凍結(jié)左邊的滾動欄/ 變更記錄: 變更或版本更新的時候/ /int iif pane = 1 theni =
48、integer(this.o b j e c t.datawindow.horizontalscrollposition2)if i < 1 or isnull(i) then returnif scrollpos > 0 thenthis.o b j e c t.datawindow.horizontalScrollPosition = 0end ifelsei = integer(this.Object.DataWindow.HorizontalScrollSplit)if i < 1 or isnull(i) then returnif i > scrollpos
49、 thenthis.o b j e c t.datawindow.horizontalScrollPosition2 = iend ifend if 24 在數(shù)據(jù)窗口中如果要使其中一列的屬性為只讀,也就是不允許用戶修改,那么只需簡單地將這一列的TableOrder 設(shè)置成0就可。然而,在有些情況下需要對這一列的某些行修改,而某些行不能修改,這就要用到這一列的protect屬性了。打開列的屬性中的Expressions,在protect中輸入條件判別式。例如:允許用戶修改新增加的記錄,而檢索出來的記錄則不允許修改。條件判別式可以寫成如下:if(isRowNew(),0,1)
50、在 PowerScript 中可以動態(tài)修改 Protect 屬性:dw_1.Modify("column_name_here.Protect='1tIf(IsRowNew(),0,1)'")這樣,DataWindow 中只有新追加的記錄可修改,而其他記錄是只讀的。 25 控制DATAWINDOW里每頁顯示的行數(shù)1、在Datawindow中增加一個計算域,起名為:ceil_page,此計算域必須放在Detail段中,Expression中輸入 ceiling(getrow()/25) 25表示每頁打印25行,也可以是一個參數(shù)。2、分組,選擇菜單Row
51、sCreate Group,選擇ceil_page按ceil_page分組,并選中New Page OnGroup Break(意思是新組開始時換頁)。3、將此計算域設(shè)為隱藏(在屬性頁中的expression頁中在visible屬性中寫0)。4、補空行:在窗口的open事件中寫如下代碼:long li_count,li_ili_count=dw_1.retrieve()if mod(li_count,25)<>0 thenfor li_i=1 to 25 - mod(li_count,25)dw_1.insertrow(0)nextend if 26 數(shù)據(jù)窗口的close
52、Query事件:提示保存數(shù)據(jù)dw_1.AcceptText()IF dw_1.ModifiedCount() + dw_1.DeletedCount() > 0 THENCHOOSE CASE MessageBox("操作提示","數(shù)據(jù)已經(jīng)發(fā)生變化,是否保存?",Question!,YesNoCancel!,1)CASE 1cb_save.TriggerEvent(clicked!)CASE 2Return 0/不做任何操作直接關(guān)閉窗口CASE 3Return 1/不會運行Close Event,維持原來的情況END CHOOSEEND IF27
53、Getchild函數(shù)主要被用來得到一個數(shù)據(jù)窗口的子數(shù)據(jù)窗口該函數(shù)在兩種情況下可以使用,1、取出數(shù)據(jù)窗口對象的下拉式數(shù)據(jù)窗口; 2、取出復(fù)合風(fēng)格(composite)數(shù)據(jù)窗口對象里所嵌入的子數(shù)據(jù)窗口對象。語法:integer dwcontrol.GetChild (string
54、name, REFDataWindowChild dwchildvariable )例子1 這段程序取出一個composite數(shù)據(jù)窗口對象的兩個子數(shù)據(jù)窗口,并對他們進(jìn)行過濾,和排序的操作。 String ls_filterDataWindowChild dwc_czrw,dwc_czx/定義子數(shù)據(jù)窗口變量dw_dy.Settranso b j e c t(sqlca)dw_dy.Retrieve()dw_dy.GetChild("dw_2",dwc_czrw)dw_dy.Getchild("dw
55、_1",dwc_czx)ls_filter = "czrw_bh ='"+dw_3.GetItemString(dw_3.GetRow(),"czrw_bh")+"'"/過濾條件dwc_czrw.SetFilter(ls_filter)dwc_czrw.Filter()ls_filter = "czx_rwbh ='"+dw_3.GetItemString(dw_3.GetRow(),"czrw_bh")+"'"dwc_czx.Set
56、Sort("czx_sx A")dwc_czx.Sort()dwc_czx.SetFilter(ls_filter)dwc_czx.filter()當(dāng)然也可以通過數(shù)據(jù)共享(ShareData)等方式操作子數(shù)據(jù)窗口中的數(shù)據(jù)。訪問復(fù)合數(shù)據(jù)窗口對象.方法 :dw_dy.o b j e ct.dw_1.o b j e c t.對象例子2 下拉數(shù)據(jù)窗口動態(tài)過濾 在數(shù)據(jù)窗口dw_1的ItemFocusChanged事件中寫入如下腳本:Integer rtncodeString ls_nowFld,ls_deptid,ls_sqlDataWindowC
57、hild fld_childrtncode = dw_1.GetChild("Unit_id",fld_child) /獲得Unit_id字段名下拉數(shù)據(jù)窗口的句柄If rtncode = -1 Then MessageBox("錯誤!", "不是下拉數(shù)據(jù)窗口!")fld_child.SetTransObject(SQLCA) /設(shè)置事務(wù)對象ls_sql = Lower(fld_child.GetSQLSelect()/ 獲得DDDW的SQL語句/ 去除Sql 語句中的Where條件子句, 如原Sql 語句中須有Where條件子句,此處
58、則需進(jìn)行較/復(fù)雜的處理,應(yīng)視具體情況而定。if Pos(ls_sql, " where ")>0 then ls_sql = Left(ls_sql,Pos(ls_sql," where ")/重新設(shè)置Sql 語句中的Where條件子句ls_deptid=dw_1.Object.dept_idGetRow() /取得當(dāng)前dept_id選定值ls_sql = ls_sql + " Where dept_id = '" +Trim(ls_deptid)+"'"/重新設(shè)置Sql 語句fld_chil
59、d.SetSQLSelect(ls_sql)fld_child.Retrieve()/取得滿足條件的數(shù)據(jù) 28 從數(shù)據(jù)窗口中獲取數(shù)據(jù) 單條:假設(shè)我們要讀取dept_id字段的第一筆數(shù)據(jù),可以用下列方式表示li_id = dw_1.o b j e c t.dept_id1 假設(shè)我們要讀取第一行中第二個字段的數(shù)據(jù),可以用下列方式表示ls_name = dw_1.o bj e c t.DATA1,2 假設(shè)我們要讀取dept_id字段的所有數(shù)據(jù),可以用下列方式表示li_array = dw_1.o b j e c t.dept_id.CURRENT
60、 假設(shè)我們要讀取過濾緩沖區(qū) (filter buffer) 內(nèi)dept_id字段的第一筆數(shù)據(jù),可以用下列方式表示li_id = dw_1.o b je c t.dept_id.Filter1 假設(shè)我們要讀取從第二筆數(shù)據(jù)的第一個字段到第三筆數(shù)據(jù)的二個字段之間的數(shù)據(jù),表示lstr_array= dw_1.o b j e c t.DATA2,1,3,2 假設(shè)我們要讀取整個第二筆的數(shù)據(jù),可以用下列方式表示lstr_dept = dw_1.o b je c t.DATA2 使用GetItemX ( )函
61、數(shù) x為string number等 lstr_name = dw_1.getitemstring (li_count , "emp_name") li_count為哪一條 多條:string ls_name ls_name = dw_ 1.o b j e ct.emp_name.current數(shù)據(jù)的讀取 一般格式數(shù)據(jù)窗口控件.Retrieve ( ) 返回個數(shù) ,-1為錯誤增加數(shù)據(jù) &
62、#160; 數(shù)據(jù)窗口控件.InsertRow(行數(shù)) 參數(shù)為0加到最后數(shù)據(jù)的刪除 數(shù)據(jù)窗口控件.Deleterow (行數(shù))數(shù)據(jù)的過濾l 數(shù)據(jù)窗口控件.SetFilter(條件字符串). 數(shù)據(jù)窗口控件.Filter ( ) 用法將主要緩沖區(qū) (Primary Buffer) 內(nèi)不符合過濾條件的數(shù)據(jù)移到過濾緩沖區(qū) (FilterBuffer)內(nèi)。 &
63、#160; 例子:string ls_exp ls_exp = "dept_id =100" dw_1.SetFilter (ls_exp) dw_1.Filter ( )排序 dw_1.SetSort("dept_id") dw_1.Sort ( )將數(shù)據(jù)從所有的緩沖區(qū) (Buffer) 中清除 dw_1.ReSet ( )計算數(shù)據(jù)數(shù)目。例如dw_1.Rowcount ( ) 類似: .DeletedCount ( ) .ModifiedCount ( ) .FilteredCount ( )數(shù)據(jù)窗口的滾動 數(shù)據(jù)窗口控件.ScrollToRow(行數(shù)) 29 數(shù)據(jù)窗口屬性改變: 描述數(shù)據(jù)窗口對象本身顏色,可以表示如下long ll_color ll_color = dw_emplist.Describe ("DataW
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 四川職業(yè)技術(shù)學(xué)院《高級機(jī)器學(xué)習(xí)》2023-2024學(xué)年第二學(xué)期期末試卷
- 遼寧城市建設(shè)職業(yè)技術(shù)學(xué)院《人類疾病動物模型》2023-2024學(xué)年第一學(xué)期期末試卷
- 江陰職業(yè)技術(shù)學(xué)院《數(shù)字矢量設(shè)計》2023-2024學(xué)年第一學(xué)期期末試卷
- 蘭州城市學(xué)院《結(jié)構(gòu)力學(xué)一》2023-2024學(xué)年第二學(xué)期期末試卷
- 外墻施工承包合同
- 商務(wù)居間合作合同
- 智慧交通智能停車場管理系統(tǒng)
- 勞動合同應(yīng)屆畢業(yè)生實習(xí)協(xié)議書
- 《天氣現(xiàn)象》天氣與植物課件
- 土建程施工合同范本
- 國家糧食和物資儲備局招聘考試真題2024
- 部編版六年級語文下冊期中考試卷(有答案)
- 生物-華大新高考聯(lián)盟2025屆高三3月教學(xué)質(zhì)量測評試題+答案
- 【初中地理】《日本》課件-2024-2025學(xué)年湘教版初中地理七年級下冊
- 洛索洛芬鈉口服溶液-藥品臨床應(yīng)用解讀
- 演出經(jīng)紀(jì)人資格證常見試題及答案分析
- 2024年河北建投集團(tuán)招聘工作人員考試真題
- 18《井岡翠竹》公開課一等獎創(chuàng)新教學(xué)設(shè)計
- 2025年湖北省八市高三(3月)聯(lián)考物理試卷(含答案詳解)
- 貴州國企招聘2024貴州磷化(集團(tuán))有限責(zé)任公司招聘89人筆試參考題庫附帶答案詳解
- 大模型關(guān)鍵技術(shù)與應(yīng)用
評論
0/150
提交評論