編程程序中想在視窗中加一個下拉串列(DDLB),原來聽同學說過可以動態改變下拉串列的值,資料庫中的表改變,前臺客戶端的下拉串列就會變,記得當時同學說的是用一個叫下拉資料視窗(DDDW)的東西做的,一直沒試過,今天遇到了這樣的問題,想試一下,于是在網上查找例子,但似乎都不合我的意,下面簡單說下需求:
涉及表:1、dm_yhzl (銀行種類代碼表)
欄位:yhzl _dm(銀行種類代碼,如1100、1200等) ,yhzl_mc(銀行種類名稱,如中國工商銀行等)
2、dm_yh(銀行名稱代碼表)
欄位:yhzl_dm(銀行種類代碼),yh_dm(銀行代碼,如1101等),yh_mc(具體銀行名稱)
需求:視窗中有一個下拉串列,里面的ITEM中包含dm_yhzl中所有的銀行種類,下拉串列中的內容隨著銀行種類代碼表中資料增加而增加,然后資料視窗中的具體銀行資訊為下拉串列中銀行種類下的所有分行等資訊。
實作:因聽同學說DDDW可以連接到資料表進行取數,開始便想試著弄一下,但DDDW好像只能在資料視窗中使用,如Freeform等型別的資料視窗,但我想要的是視窗中的DDLB,所以不滿足我的需求,于是想到了用游標的方式來實作,于是上網查詢游標的使用方法(原來沒用過,小白一下),但PBer們好像都反映游標不好用,查詢速度慢,建議使用DataStore來代替游標,于是便又接觸到了新鮮事物:DataStore(哈,再小白一下),根據網上的介紹,感覺應該可以滿足我的需求,于是試著做了起來。
第一步,創建一個資料視窗(Grid型),選擇dm_yhzl表中的兩列,如需過濾可設定where條件等,起名為dw_yhzl。
第二步,再創建一個Grid型的銀行資訊資料視窗,選擇dm_yh中的yh_dm和yh_mc列,起名為dw_yh。
第三步,在視窗控制元件中添加下拉串列(DDLB),起名為ddlb_yhzl,下面添加資料視窗控制元件,對應的資料視窗為剛才建立的dw_yh。
第四步,在視窗控制元件的open事件中寫如下代碼:
string ls_yhzl
long ll_row,ll_row_count
datastore ds_yhzl //宣告Datastore變數
ds_yhzl = create datastore //將Datastore實體化
ds_yhzl.dataobject = "dw_yhzl" //為datastore分配資料視窗物件
ds_yhzl.settransobject(sqlca) //指定連接實體
ds_yhzl.retrieve() //提取資料
ll_row_count = ds_yhzl.rowcount() //將所取資料的行數存盤在ll_row_count變數中
for ll_row = 1 to ll_row_count //創建回圈陳述句進行取值
ls_yhzl = ds_yhzl.getitemstring(ll_row,"yhzl_mc") //取當前行的yhzl_mc欄位對應的值
ddlb_yhzl.additem(ls_yhzl) //將取到的當前行的值添加到下拉串列中
next //取下一條記錄
destroy ds_yhzl //釋放datastore
通過以上操作,在打開視窗控制元件時,下拉串列中自動添加了銀行種類代碼表中的所有銀行種類,想查詢銀行種類下的具體銀行資訊,可以添加查詢按鈕,在查詢按鈕的clicked事件中添加如下代碼(也可以在下拉串列的selectionchanged事件中添加,但資料較多時可能會速度慢):
string old_select,setselect,setwhere
old_select=dw_1.describe("datawindow.table.sqlselect") //將當前資料視窗的SQL陳述句存入變數old_select
setselect="select yh_dm,yh_mc from dm_yhzl a,dm_yh b " //設定select陳述句,注意最后的雙引號前要加一個空格
setwhere="a.yhzl_dm=b.yhzl_dm" //設定where條件
if trim(ddlb_yhzl.text)<>'' then //如果在下拉串列中選擇了銀行種類,則在查詢條件中加入如下條件陳述句
setwhere+=" and a.yhzl_mc=' " + ddbl_yhzl.text + " ' "
end if
dw_1.object.datawindow.table.select=setselect+setwhere //動態修改資料視窗的查詢陳述句
dw_1.settransobject(sqlca) //指定連接實體
dw_1.retrieve() //按修改后的條件提取資料
dw_1.object.datawindow.table.select=old_select //將資料視窗的查詢陳述句重置為原來的查詢陳述句
好了,大功告成,運行程式,打開視窗,下拉串列中出現了所有銀行種類,如不進行選擇,點擊查詢按鈕,資料視窗中顯示出所有銀行資訊,如工行的各分行、建行的各分行、農行的各分行等。如果在銀行種類中選擇中國工商銀行,點擊查詢控鈕,則列出工行的所有分行資訊。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/10045.html
標籤:DataWindow
上一篇:求pb12.5 2511破解補丁
下一篇:《卓有成成效的管理者》重點
