熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> PB編程 >> 正文

在powerbuilder中使下拉列表框可以和數據關聯

2013-11-23 17:28:08  來源: PB編程 

  在從事使用powerbuilder進行數據庫開發的過程中常常碰到要使用列表框來選擇數據但是普通的下拉列表框並沒有提供和數據相連接的方法而使用數據窗口的子下拉列表框來代替又顯得有些別扭下面介紹一種好看又好用的方法

  如果使用指針把要連接的數據一條一條地從select 語句的查詢結果中fetch 出來然後再把數據additem到下拉列表框中去雖然這也是一種可行的方法但是他的速度不能令人滿意太受數據量的影響我們可以利用powerbuilder 最推崇的數據窗口技術作為數據庫和下拉列表框連接的橋梁這種方法即方便快速又安全可靠

  下面制作的下拉列表框

  打開powerbuilder的select user object畫筆選擇new user object中選擇Visual類的Standard項並按下 在彈出來的Select Standard Visual Type對話框中選擇列表中的 dropdownlistbox項並按下接著加入一些實例變量選擇Declare菜單項的Instance Variables加入變量的聲明 datastore ids_user int il_row 並按下

  我們要對新的對象進行一些限制在對象的constructor事件中加入程序

  sorted = false //這句非常必要

  reset()

  把數據檢索出來放到ids_user變量裡

  選擇菜單Declare項的User Object Function在彈出來的對話框中按下新建一個對象函數命名為init

  參數有一個

  sqlstr string

  返回值為整型integer

  現在我們需要動態地創建datastore

  在init函數中寫下

  //integer init(sqlstr string) 開始

  long ll_rowcount

  long ll_row

  string ls_sql

  string errors

  string ls_return

  ids_user = create datastore

  //根據sql語句產生數據窗口

  ls_return = sqlcaSyntaxFromSQL(sqlstr style(type=grid)errors)

  //sql語句有錯誤

  if len(errors) > then

  messagebox(錯誤 errors)

  return

  end if

  //根據語法動態創建數據窗口

  ids_usercreate(ls_return)

  ids_usersettransobject(sqlca)

  ll_rowcount = ids_userretrieve()

  //無數據返回

  if ll_rowcount= then

  return

  end if

  //把數據插入控件

  for ll_row = to ll_rowcount

  thisadditem(string(ids_userObjectData[ll_row]))

  next

  //成功返回

  return

  //integer init(sqlstr string) 結束

  現在下拉列表框已經能顯示數據了但是我們在選擇數據的同時往往需要的不是它顯示出來的值比如顯示的是人員姓名而我們需要的是工號難道再使用select語句把需要的數據檢索出來嗎?有了下面的程序我們就不必頭痛了

  重復上面建立函數的步驟新建一個名為getdata的user object函數返回值為any並在函數中寫下程序

  //any getdata() 開始

  any la_return

  long ll_row

  if text = then

  return

  end if

  //沒有選擇或沒有檢索到數據

  if ids_userrowcount() = or il_row = then

  return

  end if

  //在缺省情況下返回第二列的數據

  la_return = ids_userObjectdata[il_row ]

  return la_return

  //andy getdata() 結束

  現在還不能返回正確的數據還需要一個函數setidx(idx int)程序如下

  //setidx(idx int) 開始

  il_row = idx

  //setidx(idx int) 結束

  現在這個user object已經完成了我們來做一下試驗試一試新建一個應用app_test一個窗口w_main按照剛才的方法創建一個user object:uo_dbdropdownlistbox放入w_main中

  在app_test的open事件中寫下連接數據庫的語句並加上open(w_main)

  在w_main的open事件中寫下

  int li_result

  li_result = uo_init(select name id from sysobjects

  在uo_的selectionchanged事件中寫下setidx(index)

  messagebox(提示 + string(thisgetdata()))

  這時我們的用戶對象已經能根據選擇的name返回相應的id了

       編輯推薦

  數據倉庫與數據挖掘培訓視頻教程

  Microsoft NET框架程序設計視頻教程


From:http://tw.wingwit.com/Article/program/PB/201311/24638.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.