




已閱讀5頁,還剩45頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
DataWindow 進階介紹 Describe 語法 dwcontrol Describe stringpropertylist 範例 dw 1 Describe DataWindow Table Select 以上語句取得DW的SQL語法 Modify 語法 dwcontrol Modify stringpropertylist 範例 dw 1 Modify DataWindow Color 255 以上語句修改DW顏色 1使DataWindow列只能追加不能修改 如何使DataWindow中的資料只能追加新記錄而不能修改 利用Column的Protect屬性可以很方便的做到這一點 方法如下 將每一列的Protect屬性設(shè)置為 If IsRowNew 0 1 在PowerScript中可以動態(tài)修改Protect屬性 dw 1 Modify column name here Protect 1 tIf IsRowNew 0 1 這樣 DataWindow中只有新追加的記錄可修改 而其他記錄是唯讀的 2如何在DataWindow中實現(xiàn)列的自動折行 我們在PowerBuilder應(yīng)用程式的開發(fā)過程中 使用DataWindow時 經(jīng)常會遇到某列的資料太長 不能同時全部顯示的情況 若採用自動水準滾動 操作起來又不夠簡便 下面介紹一種方法 實現(xiàn)列資料多行顯示 即實現(xiàn)列資料的自動折行 具體步驟如下 1 在DataWindowPainter中打開此DataWindow 2 在需設(shè)定自動折行的列上雙擊滑鼠 彈開此列的屬性視窗 3 選擇Position標籤 選中AutosizeHeight多選框 4 選擇Edit標籤 不選中AutoHorzScroll多選框 5 單擊OK按鈕 保存所做的修改 2如何在DataWindow中實現(xiàn)列的自動折行 6 點中DetailBand 即寫有Detail的灰色長帶 單擊滑鼠右鍵 選擇Properties 菜單項 7 選中AutosizeHeight多選框 8 單擊OK按鈕 保存所做的修改 9 保存此DataWindow 注意 連在一起的漢字 中間沒有標點或空格分隔 系統(tǒng)將認為是一個單詞 不會自動進行折行 3在資料視窗中實現(xiàn)動畫 要實現(xiàn)動畫 必須要有計時器 在資料視窗中已經(jīng)有了一個計時器 雙擊資料視窗將彈出的對話方塊 在TimerInterval中定義大於零的值就有計時器 可以精確到毫秒 有了這個計時器就可以實現(xiàn)動畫了 比如要改變某欄位的背景顏色 可設(shè)backgound color RGB Integer Right string now hhmmssf 1 256 10 Integer Right string now hhmmssf 1 256 10 0 當然 您不僅可以改變背景顏色 而且可以改變字體等等任何屬性 4使資料視窗中的被選中行具有更好的外觀 大家都知道 在選擇資料視窗中的某一行時 如果使用pb提供的選擇函數(shù)SelectRow 那麼的外觀真是不能恭維 單調(diào)而古板的藍色背景 可能和您的漂亮而生動的應(yīng)用程式格格不入 有沒有辦法改變呢 當然有囉 請聽我慢慢道來 改變某一行的背景比較簡單 改變每一列的背景屬性 backgroundcolor 即可 可要根據(jù)滑鼠選擇情況自動改變 並可以返回被選中的行可能還需要一定的技巧 下面分單行選擇和多行選擇分辨說明 單行選擇單行選擇比較簡單 我們只要將所有欄位的背景色的運算式改為 if GetRow CurrentRow RGB 255 126 0 RGB 0 0 0 其中第一個顏色為被選中的顏色 第二個顏色未被選中的顏色 然後用GetRow 代替GetSelectedRow 函數(shù)來得到被選中的行 4使資料視窗中的被選中行具有更好的外觀 多行選擇多行選擇比較複雜 如果單純依靠改變資料視窗的屬性沒法實現(xiàn) 我們必須使用資料視窗屬性和代碼結(jié)合起來才能實現(xiàn)首先 改變資料視窗的SQL語句 增加一個計算欄位 0asflag Select語句改為 Selectcol1 col2 1asflagfromtablenamewhere 當返回資料視窗painter時 您就會發(fā)現(xiàn)多了一個欄位flag 我們就是利用這個欄位保存行被選中的資訊 其次 修改各個欄位的背景顏色屬性 設(shè)置為 if flag 1 RGB 255 126 0 RGB 255 255 255 第三 在資料視窗控制項中 增加對clicked事件的處理 代碼如下 4使資料視窗中的被選中行具有更好的外觀 ifrow 1thenreturn setredraw false ifthis object flag row 1then 如果該行被選中 撤銷選擇 否則選中該行this Object flag row 0elsethis Object flag row 1endifsetredraw true 您還可以定制本選中行的字體 文本屬性等等 原理相同 不再贅述 5將日期型欄位初始化為當天的日期 使用ColumnSpecifications對話方塊來設(shè)置資料的初始值是一個比較好又比較通用的方法 為了將日期型欄位初始化為當天的日期 只要設(shè)置初始化值為today 而不是today 即可 同樣設(shè)置初始值為NUll 可以使用null 而不是null 6在DataWindow中調(diào)整列順序 在Gird風格的DataWindow中 列的排列順序是按照你選擇Column的順序排列的 並且不能改變 要改變列的順序則必須重新製作DataWindow 最近我發(fā)現(xiàn)一個辦法可以改變列的順序 在DataWindow畫板中打開要修改的DataWindow 然後按 Preview 按鈕切換到預(yù)覽模式下 選擇要移動的列標題並拖動到預(yù)定位置 然後返回DataWindow畫板 存檔即可 7Retrieve時不清除原有Datawindow資料 當你調(diào)用Retrieve函數(shù) PowerBuilder自動清除原有DataWindow然後Retrieve資料 在DatawindowRetrieveStart事件中 使用Return2 這樣PowerBuilder不會清除原有資料而是追加新資料 8美化DataWindow的顯示效果 使DataWindow的單雙行顯示顏色不同 不僅僅可以使你的應(yīng)用程式更顯專業(yè)性 並使資料的可讀性增強 先調(diào)出你需要改動的DataWindow 在Detailband按下右鍵選擇Properties 選擇Tab頁中的Expressions 在color屬性中輸入下面內(nèi)容 注意是在Detail明細顯示段按右鍵 而不是在Column上 IF MOD GETROW 2 0 RGB 192 192 192 RGB 255 255 255 馬上Preview一下 看一看效果如何 9用Line建立漂亮的GridDataWindow的技巧 雖然PowerBuilder有Grid風格的DataWindow 但不夠靈活 如果想列印一張邊框粗線條或雙線 內(nèi)框為細線條的表格直接使用Grid風格的DataWindow就不能實現(xiàn) 因此許多人都用Tabular風格的DataWindow 然後自己用Line來實現(xiàn)Grid 在調(diào)整線條位置是一個即傷腦筋又傷眼睛的事件 而一旦需要調(diào)整行高 所有工作都得重來 試一試用下面方法 會大大減輕你的工作量 在verticallines 改變它的屬性 在ExpressionsTab上 y1行上輸入0 y2行上輸入rowheight 1在horizontallines 設(shè)置y1和y2 rowheight 5這樣PowerBuilder會自動調(diào)整線的座標 你只需要設(shè)置橫線的長度和x1 x2的座標即可 馬上Preview一下 看一看效果 你再也不需要因為行的高度發(fā)生改變而重新調(diào)整線條位置 10如何創(chuàng)建一個報表 如下形式 QuantityRunningTotal5 0005 0002 5007 5003 00010 50012 00022 500對於RunningTotal列 我們可使用計算列 CumulativeSum Quantityforall 即可達到逐漸遞增求和的功能 11資料視窗的資料送緩衝區(qū)之前確認的四個步驟 判斷資料類型是否正確 如不正確則觸發(fā)ItemError事件 判斷資料是否符合有效性規(guī)則 如不符合有效性規(guī)則 同樣觸發(fā)ItemError事件 判斷是否有資料被改動 判斷資料是否通過ItemChanged事件 如果資料和ItemChanged相斥 將觸發(fā)ItemError事件 12如何在DataWindow中用資料類型為Datetime的列為條件進行查找 1 當要查找的日期條件是一常數(shù)時使用如下運算式 ls Find datetime col DateTime 1 1 1999 2 當要查找的日期條件是一個變數(shù)時使用如下的運算式 ls Find datetime col DateTime ls Date 3 當要查找的日期條件是一個DateTime資料類型時使用如下運算式 ls Find datetime col DateTime String ldt DateTime 13設(shè)置資料視窗Boolean型屬性的三種方法 PowerBuilder提供了三種方法設(shè)置資料視窗的布林型屬性 分別是True False 1 0 Yes No 例如 dw 1 Object address Visible 0dw 1 Object address Visible Falsedw 1 Object address Visible No PowerBuilder在處理上以字串的形式保存屬性 而不考慮屬性值是布林型 長整型或是字元型 為了進一步理解 可以導(dǎo)出一個資料視窗並查看它的原碼 可以發(fā)現(xiàn)即使是列的顏色屬性它也是使用帶雙引號的數(shù)字來表達 14如何在DataWindow中快速刪除多行 在開發(fā)過程中可能經(jīng)常有要進行多行刪除的操作 一般都使用迴圈語句進行操作 FORll RowOn 1TOdw 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 不過不要忘了過濾的行在不同的緩衝區(qū)中 15如何在DataWindow的SQL語法中不使用SELECTDISTINCT實現(xiàn)刪除重複的行 起先對你要顯示唯一值的列進行排序 cityA 然後增加如下過濾字串 citycity 1 orGetRow 1 16如何在分組形式的DataWindow中分別顯示各組的行號 當我們?yōu)镈atawindow的每一行顯示行號時 可以簡單的放一個運算式為GetRow 計算列 但是對於分組的Datawindow 要分別顯示各組的行號 則應(yīng)使用運算式為GetRow First GetRow forGroup1 1的計算列 17如何改變列的字體顏色 提醒用戶此列已做修改 在列的Color屬性中 輸入如下運算式IF column namecolumn name Original RGB 255 0 0 RGB 0 0 0 在這個條件中 如果此列已改變 則顯示紅色字體 否則顯示黑色字體 這個運算式主要用column namecolumn name Original比較當前列的值和原始列的值是否相同來達到判斷的目的 18在資料視窗中移走行 但不是去做過濾或刪除操作 RowsDiscard 函數(shù)可做到這一點 它在資料視窗中執(zhí)行移除工作 但被移走的行它不可被刪除或做任何修改性的保存 19如何在多行顯示的DataWindow中的FooterBand中顯示當前資料的首行和最後行的行號 我們先看兩個計算列的運算式 IF GetRow First GetRow FORPage 1 0 1為當前頁的第一行IF GetRow 1ANDGetRow Last GetRow FORPage 1 0 1為當前頁的最後一行由上面可知 在FooterBand中設(shè)置如下計算列運算式 Rows String First GetRow FORPage to String Last GetRow FORPage aredisplayed 即可達到這項功能 20使可編輯的資料視窗唯讀 有時 你可能需要將一個用於編程的資料視窗用作顯示目的 可以有以下幾種方法來實現(xiàn)這一要求 1 建立兩個資料視窗 一個用於編輯 一個用於顯示2 將資料視窗中的全部物件的taborder設(shè)置為0 3 也可以將資料視窗中的列的protect屬性設(shè)為On或Off 但你不能使用protect屬性進行編輯操作4 資料視窗有一個將datawindow設(shè)為唯讀的屬性 readonly 使用它最方便 21資料視窗檢查重複行 dw 1 SetSort user idA dw 1 Sort dw 1 SetFilter user id user id 1 dw 1 Filter ifdw 1 RowCount 0thenMessagebox 注意 用戶編碼重複 endifdw 1 SetFilter dw 1 Filter 22如何在分組形式的DataWindow中分別顯示各組的行號 當我們?yōu)镈atawindow的每一行顯示行號時 可以簡單的放一個運算式為GetRow 計算列 但是對於分組的Datawindow 要分別顯示各組的行號 則應(yīng)使用運算式為GetRow First GetRow forGroup1 1的計算列 23如何能讓資料視窗的某幾列在其他列橫拉時固定不動 功能說明 用於凍結(jié)左邊的滾動欄 變更記錄 變更或版本更新的時候intiifpane 1theni integer this object datawindow horizontalscrollposition2 ifi0thenthis object datawindow horizontalScrollPosition 0endifelsei integer this Object DataWindow HorizontalScrollSplit ifiscrollposthenthis object datawindow horizontalScrollPosition2 iendifendif 24 在資料視窗中如果要使其中一列的屬性為唯讀 也就是不允許用戶修改 那麼只需簡單地將這一列的TableOrder設(shè)置成0就可 然而 在有些情況下需要對這一列的某些行修改 而某些行不能修改 這就要用到這一列的protect屬性了 打開列的屬性中的Expressions 在protect中輸入條件判別式 例如 允許用戶修改新增加的記錄 而檢索出來的記錄則不允許修改 條件判別式可以寫成如下 if isRowNew 0 1 在PowerScript中可以動態(tài)修改Protect屬性 dw 1 Modify column name here Protect 1 tIf IsRowNew 0 1 這樣 DataWindow中只有新追加的記錄可修改 而其他記錄是唯讀的 25控制DATAWINDOW裏每頁顯示的行數(shù) 1 在Datawindow中增加一個計算域 起名為 ceil page 此計算域必須放在Detail段中 Expression中輸入ceiling getrow 25 25表示每頁列印25行 也可以是一個參數(shù) 2 分組 選擇功能表Rows CreateGroup 選擇ceil page按ceil page分組 並選中NewPageOnGroupBreak 意思是新組開始時換頁 3 將此計算域設(shè)為隱藏 在屬性頁中的expression頁中在visible屬性中寫0 4 補空行 在視窗的open事件中寫如下代碼 longli count li ili count dw 1 retrieve ifmod li count 25 0thenforli i 1to25 mod li count 25 dw 1 insertrow 0 nextendif 26資料視窗的closeQuery事件 提示保存資料 dw 1 AcceptText IFdw 1 ModifiedCount dw 1 DeletedCount 0THENCHOOSECASEMessageBox 操作提示 資料已經(jīng)發(fā)生變化 是否保存 Question YesNoCancel 1 CASE1cb save TriggerEvent clicked CASE2Return0 不做任何操作直接關(guān)閉視窗CASE3Return1 不會運行CloseEvent 維持原來的情況ENDCHOOSEENDIF 27Getchild函數(shù)主要被用來得到一個資料視窗的子資料視窗 該函數(shù)在兩種情況下可以使用 1 取出資料視窗物件的下拉式資料視窗 2 取出複合風格 composite 資料視窗物件裏所嵌入的子資料視窗物件 語法 integerdwcontrol GetChild stringname REFDataWindowChilddwchildvariable 例子1這段程式取出一個composite資料視窗物件的兩個子資料視窗 並對他們進行過濾 和排序的操作 dw dy是連接一個composite資料視窗物件的一個資料視窗控制項 dw 1 dw 2分別是嵌套的資料視窗的NAME 27Getchild函數(shù)主要被用來得到一個資料視窗的子資料視窗 Stringls filterDataWindowChilddwc czrw dwc czx 定義子資料視窗變數(shù)dw dy Settransobject sqlca dw dy Retrieve dw dy GetChild dw 2 dwc czrw dw dy Getchild dw 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 SetSort czx sxA dwc czx Sort dwc czx SetFilter ls filter dwc czx filter 27Getchild函數(shù)主要被用來得到一個資料視窗的子資料視窗 當然也可以通過資料共用 ShareData 等方式操作子資料視窗中的資料 訪問複合資料視窗物件 方法 dw dy object dw 1 object 對象 27Getchild函數(shù)主要被用來得到一個資料視窗的子資料視窗 例子2下拉資料視窗動態(tài)過濾在資料視窗dw 1的ItemFocusChanged事件中寫入如下腳本 IntegerrtncodeStringls nowFld ls deptid ls sqlDataWindowChildfld childrtncode dw 1 GetChild Unit id fld child 獲得Unit id欄位名下拉資料視窗的控制碼Ifrtncode 1ThenMessageBox 錯誤 不是下拉資料視窗 fld child SetTransObject SQLCA 設(shè)置事務(wù)物件ls sql Lower fld child GetSQLSelect 獲得DDDW的SQL語句 27Getchild函數(shù)主要被用來得到一個資料視窗的子資料視窗 去除Sql語句中的Where條件子句 如原Sql語句中須有Where條件子句 此處則需進行較 複雜的處理 應(yīng)視具體情況而定 ifPos ls sql where 0thenls sql Left ls sql Pos ls sql where 重新設(shè)置Sql語句中的Where條件子句ls deptid dw 1 Object dept id GetRow 取得當前dept id選定值ls sql ls sql Wheredept id Trim ls deptid 重新設(shè)置Sql語句fld child SetSQLSelect ls sql fld child Retrieve 取得滿足條件的資料 28從資料視窗中獲取資料 單條 假設(shè)我們要讀取dept id欄位的第一筆資料 可以用下列方式表示 li id dw 1 object dept id 1 假設(shè)我們要讀取第一行中第二個欄位的資料 可以用下列方式表示 ls name dw 1 object DATA 1 2 假設(shè)我們要讀取dept id欄位的所有資料 可以用下列方式表示 li array dw 1 object dept id CURRENT假設(shè)我們要讀取過濾緩衝區(qū) filterbuffer 內(nèi)dept id欄位的第一筆資料 可以用下列方式表示 li id dw 1 object dept id Filter 1 假設(shè)我們要讀取從第二筆資料的第一個欄位到第三筆資料的二個欄位之間的資料 表示 lstr array dw 1 object DATA 2 1 3 2 假設(shè)我們要讀取整個第二筆的資料 可以用下列方式表示 lstr dept dw 1 object DATA 2 28從資料視窗中獲取資料 使用GetItemX 函數(shù)x為stringnumber等lstr name dw 1 getitemstring li count emp name li count為哪一條多條 stringls name ls name dw 1 object emp name current資料的讀取一般格式 資料視窗控制項 Retrieve 返回個數(shù) 1為錯誤增加資料資料視窗控制項 InsertRow 行數(shù) 參數(shù)為0加到最後資料的刪除資料視窗控制項 Deleterow 行數(shù) 資料的過濾l資料視窗控制項 SetFilter 條件字串 28從資料視窗中獲取資料 資料視窗控制項 Filter 用法 將主要緩衝區(qū) PrimaryBuffer 內(nèi)不符合過濾條件的資料移到過濾緩衝區(qū) FilterBuffer 內(nèi) 例子 stringls expls exp dept id 100 dw 1 SetFilter ls exp dw 1 Filter 排序dw 1 SetSort dept id dw 1 Sort 將資料從所有的緩衝區(qū) Buffer 中清除dw 1 ReSet 計算資料數(shù)目 例如 dw 1 Rowcount 類似 DeletedCount ModifiedCount FilteredCount 資料視窗的滾動資料視窗控制項 ScrollToRow 行數(shù) 29資料視窗屬性改變 描述資料視窗物件本身顏色 可以表示如下 longll colorll color dw emplist Describe DataWindow Color 描述資料視窗物件內(nèi)標題dept id t的顏色 可以表示如下 longll colorll color dw emplist Describe dept id t Color 修改資料視窗物件本身顏色 可以表示如下 dw emplist Modify DataWindow Color 255 修改資料視窗物件內(nèi)標題dept id的顏色 可以表示如下 dw emplist Modify dept id t Color 255 假設(shè)當我們希望在程式運行階段才給予下行條件 薪水超過50000時顯示紅色 低於50000時顯示黑色 程式的寫法如下 ls modstring Salary Color 0 tIf Salary 50000 255 0 dw 1 modify ls modstring 30得到當前滑鼠所指物件所在的帶區(qū) stringstr bandstr band GetBandAtPointer 得到當前滑鼠所指物件所在的帶區(qū)str band left str band pos str band t 1 得到 header detail 等ifstr band header thenreturn 單擊非頭區(qū) 退出 31得到滑鼠指向的列物件名 str object GetObjectAtPointer 得到當前滑鼠所指物件名str object left str object pos str object t 1 得到列物件名 默認為列名 t為列標題 str column left str object len str title 2 判斷該名稱是否為列名字ifthis describe str column band thenreturn 非是列名 即列標題不是按正常規(guī)律起名的 32得到當前行 列 總行 列 this針對資料視窗而言 li col this GetColumn li ColCount long describe this datawindow column count ll row this GetRow ll RowCount this RowCount 設(shè)置當前行 列scrolltorow this ll Row setrow this ll Row setcolumn this li col this SetFocus 33得到所有列標題 ll colnum Long dw 1 object datawindow column count fori 1toll colnum 得到標題頭的名字ls colname dw 1 describe string i name t ls value dw 1 describe ls colname text next 34如何用代碼取得資料視窗匯總帶計算列的值 Stringls valuels value dw 1 Describe Evaluate compute 1 1 如果是數(shù)值型 要轉(zhuǎn)換 35取得單擊的列標題 列名 資料庫欄位名 stringls dwo ls type ls title ls column ls dbnamelongll posifNotKeyDown KeyControl thenreturnls dwo dwo Nameiftrim ls dwo orisnull ls dwo thenreturnls type This describe ls dwo type ifls type column thenls title This describe ls dwo t text 標題ls column This describe
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司職場內(nèi)活動方案
- 公司組織健身走活動方案
- 公司自制檸檬茶活動方案
- 公司晨會團體活動方案
- 2025年統(tǒng)計學專業(yè)期末考試試卷及答案
- 2025年經(jīng)濟法相關(guān)知識考試試題及答案
- 北師大版(2024)七年級下冊英語期末復(fù)習:Unit1~6各單元書面表達練習題(含答案+范文)
- 2025年中國冷凍面包產(chǎn)品行業(yè)市場全景分析及前景機遇研判報告
- 2024年度浙江省二級造價工程師之建設(shè)工程造價管理基礎(chǔ)知識練習題及答案
- 2024年度浙江省二級注冊建筑師之法律法規(guī)經(jīng)濟與施工題庫綜合試卷B卷附答案
- GB/T 26059-2010鈦及鈦合金網(wǎng)板
- GB/T 19673.2-2013滾動軸承套筒型直線球軸承附件第2部分:5系列外形尺寸和公差
- 《士兵突擊》課件
- 《長方形和正方形》 完整版課件
- 蘇教版六年級科學下冊期末考試卷及答案
- 孕產(chǎn)期保健管理及工作規(guī)范(喀什)
- 再遇青春同學聚會畫冊PPT模板
- 二、施組報審表
- 無砟軌道底座板首件施工總結(jié)(最新)
- 油藏數(shù)值模擬中幾種主要的數(shù)學模型
- 200立方米谷氨酸發(fā)酵罐設(shè)計
評論
0/150
提交評論