编程过程中想在窗口中加一个下拉列表(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   //将数据窗口的查询语句重置为原来的查询语句

好了,大功告成,运行程序,打开窗口,下拉列表中出现了所有银行种类,如不进行选择,点击查询按钮,数据窗口中显示出所有银行信息,如工行的各分行、建行的各分行、农行的各分行等。如果在银行种类中选择中国工商银行,点击查询控钮,则列出工行的所有分行信息。

在此例中学到了datastore的应用,感觉非常有用,这样使用后,如果有新的银行信息加入时,只要对数据库中的银行种类表进行维护,客户端的下拉列表即可同时更新,非常方便。

PB中的DataStore的应用示例的更多相关文章

  1. PB中multieditline空间的“~r~n"转"~n"

    private: constant String MULEDIT_NEWLINE = "~r~n" //multilineEdit控件的换行符号 constant String M ...

  2. Python 3.X 调用多线程C模块,并在C模块中回调python函数的示例

    由于最近在做一个C++面向Python的API封装项目,因此需要用到C扩展Python的相关知识.在此进行简要的总结. 此篇示例分为三部分.第一部分展示了如何用C在Windows中进行多线程编程:第二 ...

  3. pb中遍历查询数据库数据问题(数据库为 sql server)

    指针可以实现但是不推荐 例如:(部分代码) for ll_a = 1 to ll_count    ll_b = ll_i +  ll_a  //插入行行号先下移一位    dw_main.inser ...

  4. 如何在PB中调用 Microsoft WEB 浏览器 控件?

    PB中使用Microsoft Web Browser控件步骤: 在pb的某窗口中加入OLE对象,选择Insert control(插入控件),然后选中"Microsoft WEB 浏览器&q ...

  5. Java中的break循环——通过示例学习Java编程(13)

    作者:CHAITANYA SINGH 来源:https://www.koofun.com//pro/kfpostsdetail?kfpostsid=24 break语句通常用于以下两种情况: (A)使 ...

  6. ioctl在socket中的一些用法及示例

    原文: http://blog.chinaunix.net/uid-20692625-id-3172833.html ----------------------------------------- ...

  7. 使用注解注入properties中的值的简单示例

    spring使用注解注入properties中的值的简单示例   1.在web项目的src目录下新建setting.properties的文件,内容如下: version=1 2.在spring的xm ...

  8. 在 ASP.NET MVC 中充分利用 WebGrid (microsoft 官方示例)

    在 ASP.NET MVC 中充分利用 WebGrid https://msdn.microsoft.com/zh-cn/magazine/hh288075.aspx Stuart Leeks 下载代 ...

  9. Tyrion中文文档(含示例源码)

    Tyrion是一个基于Python实现的支持多个WEB框架的Form表单验证组件,其完美的支持Tornado.Django.Flask.Bottle Web框架.Tyrion主要有两大重要动能: 表单 ...

随机推荐

  1. JavaWeb-SpringBoot(抖音)_三、抖音项目后续

    JavaWeb-SpringBoot(抖音)_一.抖音项目制作 传送门 JavaWeb-SpringBoot(抖音)_二.服务器间通讯 传送门 JavaWeb-SpringBoot(抖音)_三.抖音项 ...

  2. conda程序使用

    conda -c 参数 使用清华镜像时不要使用-c 参数.-c参数是anaconda的默认channel. 查询安装源中某个包的可以安装的版本 conda search -f package_name ...

  3. python中的fstring的 !r,!a,!s

    首先是fstring的结构 f ' <text> { <expression> <optional !s, !r, or !a> <optional : fo ...

  4. JSON 转含有泛型属性的对象

    在将 json 字符串转为对象时,如果对象含有泛型,在进行转换时需要指明泛型类型. 1. 对象只含有一个泛型属性时 1.1  代码 /** * @Describe: * @Author: chenfa ...

  5. org.apache.ibatis.binding.BindingException: Parameter 'xxx' not found.

    1. 情景重现 1.1 Mapper 代码 public interface DeviceFileInfoVOMapper { List<QueryFileDTO> selectVideo ...

  6. xftp上传文件到虚拟机linux失败问题

    如果想通过xftp上传文件到虚拟机linux时,可能会产生上传失败的问题 原因: 因为有些文件是只可读,所以要修改文件权限,可读可写,才可以上传成功. 解决方法: 第一种方法:用xftp连接虚拟机后, ...

  7. SRS之监听端口的管理:RTMP

    1. 监听端口管理的入口函数 监听端口的管理入口在 run_master 函数中,如下: int run_master() { ... if ((ret = _srs_server->liste ...

  8. Python中循环及判断语句

    循环判断条件是编程语言中一个很重要的部分,python也不例外,循环判断条件一般结合continue,return,break关键字来判断,这些关键字用法与java中基本一致 一.if判断语句 判断条 ...

  9. leetcode-hard-array-238. Product of Array Except Self-NO

    mycode   99.47% class Solution(object): def productExceptSelf(self, nums): """ :type ...

  10. js携带参数跳转controller返回页面

    upauth:function(){ var record = myForm.getRecord(); var companywyId = record.get("companyId&quo ...