`
zjut_xiongfeng
  • 浏览: 280151 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

pb从数据窗口获得数据的方法总结

阅读更多

通过PowerBuilder的数据窗口对象属性,我们可以指定一定格式的表达式来直接从数据窗口中获得数据。这种直接的数据操作方法让我们能只需一条语句而不用调用许多方法,就可得到一定量甚至大量的数据。操作数据的表达式大致可分为三种,下面逐一介绍。
---------------------------------------------------------------------
1) 在知道列或计算域名时得到数据得到某列中一行或全部的值,
表达式:(如果rownum忽略,则可得到缓冲区或数据源的值)
dwcontrol.Object.columnname {.buffer } {.datasource } { [ rownum ] }
其中datasource 参数表示数据源,它有两个可选项,Current(缺省)和Original,由此参数我们可以指定数据是从当前数据窗口上还是从数据库中得到。对于计算域,它不能被改变也没有当前值,所以我们必须指定为此参数为Original。
示例:
因为缺省设置是在Primary缓冲区的当前值,下面语句是等价的,都是从第一行得到emp_name列的值
dw_1.Object.emp_name[1]
dw_1.Object.emp_name.Primary.Current[1]
下面语句设置emp_name列的第一行值为“国防科技大学先进制造中心”
dw_1.Object.emp_name[1] = "国防科技大学先进制造中心"
下面语句得到所有emp_name列的值,并将它们放入数组中
string ls_namearray[]
ls_namearray = dw_1.Object.emp_name.Current
下面语句得到emp_name列在filter缓冲区的所有当前值
string ls_namearray[]
ls_namearray = dw_1.Object.emp_name.Filter
下面语句得到emp_name在filter缓冲区的初始值(数据库中的值)
string ls_namearray[]
ls_namearray = dw_1.Object.emp_name.Filter.Original
下面语句得到emp_name列在delete缓冲区的第14行的当前值
string ls_name
ls_name = dw_1.Object.emp_name.Delete[14]This statement gets the original
下面语句得到emp_name列在delete缓冲区的第14行的初始值(数据库中的值)
string ls_name
ls_name = dw_1.Object.emp_name.Delete.Original[14]
下面语句得到review_date计算域的所有值
string ld_review[]
ld_review = dw_1.Object.review_date.Original
得到被选择项的值
表达式:dwcontrol.Object.columnname {.Primary }{.datasource }.Selected
示例:
由于Primary缓冲区是程序本选择项所在的唯一缓冲区并且当前数据是缺省的,下面的语句作用是等价的,它们实现从emp_name列中得到被选中行的值。
dw_1.Object.emp_name.Selected
dw_1.Object.emp_name.Primary.Selected
dw_1.Object.emp_name.Current.Selected
dw_1.Object.emp_name.Primary.Current.Selected
下面语句从数据库中得到被选择行的数据
dw_1.Object.emp_name.Original.Selected
dw_1.Object.emp_name.Primary.Original.Selected
下面语句设置emp_name列的第一个被选中行的值为空字符串
string ls_empty[]
ls_empty[1] = ""
dw_1.Object.emp_lname.Selected = ls_empty
下面语句可得到emp_name列被选中行的初始值(从数据库中检索出的值),并将它放入一个字符串数组
string ls_namearray[]
ls_namearray = dw_1.Object.emp_name.Original.Selected
得到一定范围的值
返回指定列的一个范围的行的值,并将它们放入数组
表达式:
dwcontrol.Object.columnname {.buffer } {.datasource } [ startrownum,
endrownum ]
示例:
由于Primary缓冲区和当前数据是缺省选项,下面的语句式等价的
dw_1.Object.emp_name[11,20]
dw_1.Object.emp_name.Primary[11,20]
dw_1.Object.emp_name.Current[11,20]
dw_1.Object.emp_name.Primary.Current[11,20]
下面语句将emp_name列从11行到20行的值设置为空字符串
string ls_empty[]
ls_empty[1] = ""
dw_1.Object.emp_name[11,20] = & {"","","","","","","","","",""}
---------------------------------------------------------------------
下面语句的得到emp_name列的初始值,并将它们放入一个字符串数组
string ls_namearray[]
ls_namearray = dw_1.Object.emp_name.Original[11,20]
---------------------------------------------------------------------
下面语句得到emp_name列在过滤缓冲区从5行到8行的当前值,并且将它们放入到数组中
string ls_namearray[]
ls_namearray = dw_1.Object.emp_name.Filter[5,8]
---------------------------------------------------------------------
下面语句得到emp_name列在过滤缓冲区从5行到8行的初始值,并且将它们放入到数组中
string ls_namearray[]
ls_namearray = dw_1.Object.emp_name.Filter.Original[5,8]
---------------------------------------------------------------------
下面语句得到emp_name列在删除缓冲区从50行到200行的当前值,并且将它们放入到数组中
string ls_namearray[]
ls_namearray = dw_1.Object.emp_name.Delete[50,200]
---------------------------------------------------------------------
下面语句得到emp_name列在删除缓冲区从50行到200行的初始值,并且将它们放入到数组中
string ls_namearray[]
ls_namearray = dw_1.Object.emp_name.Delete.Original[50,200]
---------------------------------------------------------------------

2)得到已知列号列的值
得到指定行号列号的值
表达式:
dwcontrol.Object.Data {.buffer } {.datasource } [ rownum, colnum ]
示例:
由于Primary缓冲区和当前值选项是缺省的,所以下面语句式等价的,都是得到第一行,第二列的数据
dw_1.Object.Data[1,2]
dw_1.Object.Data.Primary.Current[1,2]
---------------------------------------------------------------------
下面语句将Filter缓冲区的初始值中得第一行,第二列的值改为0
dw_1.Object.Data.Filter.Original[1,2] = 0
---------------------------------------------------------------------
得到一定范围行的数据
表达式:
dwcontrol.Object.Data {.buffer } {.datasource } [ startrownum, startcolnum, endrownum, endcolnum ]
示例:
---------------------------------------------------------------------
由于Primary缓冲区和当前值选项是缺省的,所以下面语句式等价的,都是得到第一行到第十行,第一列到第四列的值
dw_1.Object.Data[1,1,10,4]
dw_1.Object.Data.Primary.Current[1,1,10,4]
---------------------------------------------------------------------
下面语句得到employee Ids和 last names列在delete缓冲区的所有行的值,Ids和names列是第一第二列。得到的数据放在名为str_namelist的一个结构中,此结构有两个属性,整形的id和字符串形的lastname。Ids和names被存放在文件deleted.txt中。
integer li_fileNum
long ll_deletedrows
str_namelist lstr_namelist[]
ll_deletedrows = dw_1.DeletedCount()
lstr_namelist = &
dw_1.Object.Data.Delete[1,1, ll_deletedrows,2]
li_fileNum = FileOpen("C:\HR\DELETED.TXT", &
LineMode!, Write!)
FOR ll_count = 1 to UpperBound(lstr_namelist)
FileWrite(li_fileNum, &
String(lstr_namelist.id) + &
" " + &
lstr_namelist.lastname + &
"~r~n")
NEXT
FileClose(li_fileNum)
---------------------------------------------------------------------
下面的语句使Ids和last names列的数据为NULL
long ll_n
str_namelist lstr_namelist[]
SetNull(lstr_namelist[1].id)
SetNull(lstr_namelist[1].lastname)
FOR ll_n = 2 to dw_1.RowCount()
lstr_namelist[ll_n] = lstr_namelist[1]
NEXT
dw_1.Object.Data[1,1, dw_1.RowCount(),2] = lstr_data

3)得到整行数据
得到数据窗口上的某行或全部行的数据
表达式:
dwcontrol.Object.Data {.buffer } {.datasource } { [ rownum ] }
示例:
---------------------------------------------------------------------
由于Primary缓冲区和当前值选项是缺省的,所以下面语句式等价的,都是得到Primary缓冲区第五行的当前数据
dw_1.Object.Data[5]
dw_1.Object.Data.Primary.Current[5]
下面语句将数据窗口Primary缓冲区的当前值放入到一个结构数组中
any la_dwdata
la_dwdata = dw_1.Object.Data
下面语句得到数据窗口Delete缓冲区的当前值,并将它放入到一个结构数组中
any la_dwdata
la_dwdata = dw_1.Object.Data.Delete
下面语句用数据窗口dw_2的Primary缓冲区的当前值覆盖嵌套报表的第二行的数据,在数据窗口dw_2中的列必须与嵌套报表中的列相同:
dw_1.Object.NestRep[2].Object.Data = dw_2.Object.Data
---------------------------------------------------------------------
得到选中行的数据
表达式:
dwcontrol.Object.Data {.Primary } {.datasource } .Selected
示例:
由于Primary缓冲区和当前值选项是缺省的,所以下面语句式等价的,都是得到选中行的数据
dw_1.Object.Data.Selected
dw_1.Object.Data.Primary.Selected
dw_1.Object.Data.Current.Selected
dw_1.Object.Data.Primary.Current.Selected
=====================================================================
下面语句得到被选中行的初始值
dw_1.Object.Data.Original.Selected
dw_1.Object.Data.Primary.Original.Selected
---------------------------------------------------------------------
下面语句得到dw_2中Primary缓冲区选中行的当前值,然后放到dw_1中的列useroption(下拉数据窗口)中
dw_1.Object.useroptions.Object.Data = dw_2.Object.Data.Selected

4)从Crosstab数据窗口中获得点击域名和域值
对于Crosstab类型的数据窗口,我们在前面已做了简要的介绍,但由于它的行列都可以随着后台数据库存放数据的改变而发生改变,所以在想得到它的某个行列定义的值时不能采用一般的方法,如GetItem××××和点操作符。
通过数据窗口画板可以看到所有的列具有同样的列名,在程序运行时它们会自动的*列名后加后缀的方法进行区别,格式为:列名_列号~t行号,列号和行号之间通过‘~t’分隔,列名和列号通过‘_’分隔。因此如果我们需要detail栏的任何一列的值,就需要将得到的信息进行解析,提取出选择的列名,列号和行号,然后才可以通过一般得数据的方法在数据窗口中获得需要的数据。下面我们以一个具体的例子来解说上面采用的方法。
作用:在数据窗口(数据源为Crosstab)的Cliked事件中编程,当点击事件发生后将获得点击交*表行列交叉点的值;
程序:
//定义变量
string ls_detail, ls_name, ls_col
int li_pos, li_len, li_row, li_col
//判断用户点击处是否为detail栏,如不是则退出
if left(getbandatpointer(),6) <> "detail" then return
//得到点击域的信息
ls_detail = geto b j e c tatpointer()
//得到detail栏第二列的名称,第一列为数据窗口行信息
ls_name = Object.#2.Name
//将第二列列名和前面点击得到的点击域信息进行比较,如不是点击的第二列则退出
if left(ls_detail,len(ls_name)) <> ls_name then return
//得到点击域的行号
li_row = row
li_len = len(ls_detail)
//从前面得到点击域信息中得到关于列号的信息
ls_col = right(ls_detail, li_len - len(ls_name))
//得到点击域的列号

if left(ls_col,1) <> "_" then
li_col = 2
else
li_pos = pos(ls_col,"~t")
li_col = integer(mid(ls_col,2,li_pos - 1) ) + 2
end if
//显示出点击域的值

string(getitemnumber(li_row,li_col))

分享到:
评论

相关推荐

    PB下拉数据窗口的动态过滤

    总结,实现PB下拉数据窗口的动态过滤,需要结合事件处理、数据窗口的过滤方法以及对SQLServer2000的适配。通过这样的设计,可以提供用户友好的交互体验,使他们能快速定位到所需的信息,提高工作效率。

    PB下拉数据窗口录入动态过滤

    在PowerBuilder(PB)开发环境中,数据窗口(DataWindow)是一种强大的组件,用于显示和操作数据库中的数据。本文将深入探讨“PB下拉数据窗口录入动态过滤”这一主题,这在实际应用中对于提高用户体验和数据输入的...

    pb 数据窗口 拖拽 dragdrop

    在这个场景中,我们关注的是PB数据窗口(DataWindow)的拖放功能(DragDrop)。数据窗口是PB中的一个核心组件,用于显示和操作数据库中的数据。拖放功能允许用户通过鼠标将数据从一个位置移动到另一个位置,提供了...

    PB数据窗口排序控件

    在这个场景下,"PB数据窗口排序控件"就是一个预设了排序功能的基类控件,导入到PB环境中后,其他数据窗口控件可以简单地基于这个基类进行创建,从而获得排序功能。 "u_dwpublicgride.sru" 文件可能是这个排序控件的...

    PB 11.5 数据窗口计算列显示图片的方法

    最后,完成数据窗口设计后,将其绑定到控件(如Text Object或List Box)并在事件(如Paint事件)中调用数据窗口的Paint方法,这样图片就会在运行时显示在计算列中。 总之,在PowerBuilder 11.5中,通过使用计算列和...

    pb中数据窗口函数小结

    - 此方法用于从数据库中检索数据并填充到数据窗口中。 - 在使用此方法前,需要确保已经正确设置了数据源和查询语句。 - **示例**: - 假设 `dw_1` 是一个数据窗口控件,我们可以简单地通过 `dw_1.Retrieve()` 来...

    PB 11.5 数据窗口计算列显示图片方法实例

    总的来说,PB 11.5的数据窗口计算列显示图片是一种灵活的方法,可以用于增强数据的可视化效果,提供更丰富的用户界面。通过理解和实践这样的实例,开发者能够更好地掌握PB的数据窗口功能,从而设计出更具吸引力和...

    PB动态检索 模糊查询 下接数据窗口 数据窗口 数据窗口

    PB动态检索和模糊查询是PowerBuilder(PB)开发过程中常用的功能,主要应用于数据窗口(Data Window)组件,以便用户能够高效地在大量数据中查找所需信息。数据窗口是PB的核心组件,它允许开发者以多种方式展示和...

    PB数据窗口存储为PDF

    PB数据窗口(PowerBuilder DataWindow)是Sybase PowerBuilder编程环境中的一种强大组件,它用于处理和展示数据库中的数据。在本场景中,我们将探讨如何将PB数据窗口转换并存储为PDF格式,以便于打印、分享或长期...

    pb数据窗口,可导出中文标题

    标题中的“pb数据窗口,可导出中文标题”指的是在PowerBuilder(PB)环境中,数据窗口(DataWindow)对象在默认情况下可能无法正确显示或导出中文标题的问题。数据窗口是PB中的一个重要组件,用于展示数据库中的数据...

    PB用窗口dw做模拟下拉数据窗

    ### 三、标签解析:“PB PB数据窗口” 这两个标签表明本文主要关注的是PB及其数据窗口功能。PowerBuilder是一种广泛应用于企业级应用开发的快速应用开发工具,而数据窗口则是PB中的一个重要组件,用于展示和操作...

    PB数据窗口导出Word文件简单例子

    这个“PB数据窗口导出Word文件简单例子”是针对初学者的一个实践教程,旨在帮助他们理解如何利用PB的数据窗口功能将数据导出为Microsoft Word文档。这个例子可能包括了创建数据窗口对象、填充数据、以及执行导出操作...

    PB数据窗口根据字段内容设置字段宽度

    标题"PB数据窗口根据字段内容设置字段宽度"以及描述"PB9、PB12.5数据窗口根据每个字段内容再设置相应字段宽度!"所涉及的知识点,主要是关于如何动态地根据字段的实际内容来调整数据窗口内各字段的宽度。 在Power...

    PB数据窗口的排序

    PB数据窗口是PowerBuilder(PB)中的核心组件之一,它是一种强大的数据展示工具,用于在用户界面中显示和操作数据库中的数据。数据窗口排序功能允许用户根据特定字段对数据显示进行升序或降序排列,提供了灵活的数据...

    PB将数据窗口的内容保存成PDF格式的文档

    综上所述,将PB数据窗口的内容保存为PDF格式的文档涉及多个步骤,包括选择合适的转换工具,处理数据窗口对象,以及编写相应的PB代码进行调用。通过熟练掌握这些技术,可以提高PB应用的用户体验和功能丰富度。

    PB动态创建数据窗口

    ### PB动态创建数据窗口知识点详解 #### 一、概述 在使用PowerBuilder开发应用程序时,开发者经常需要根据用户的特定需求动态地创建数据窗口。本文档将深入探讨如何通过PowerBuilder的`SyntaxFromSQL()`函数来实现...

    PB数据窗口技巧

    PB数据窗口技巧主要涉及PowerBuilder中数据窗口的不同显示样式及其应用场景。数据窗口是PowerBuilder中用于展示和操作数据库数据的核心组件,它提供了多种显示样式以适应不同的需求。 1. **Grid**样式:这是最常见...

    自定义pb数据窗口线条颜色

    总结来说,自定义PB数据窗口线条颜色需要掌握数据窗口的绘图属性和事件,以及如何使用相应的绘图函数。同时,了解如何利用系统资源或第三方工具来实现特定功能,如提取机器码,是提升PB应用功能的关键。在实际项目中...

    PB115数据窗口空白崩溃

    ### PB115数据窗口空白崩溃问题解析及解决方案 #### 一、问题概述 在使用PowerBuilder 11.5(以下简称PB11.5)过程中遇到数据窗口显示空白并且在关闭时导致整个应用程序崩溃的问题。该问题严重影响了开发效率,并且...

    在PB中巧用下拉数据窗口

    ### 在PB中巧用下拉数据窗口:详细解析与实践应用 #### 一、引言 在PowerBuilder(简称PB)开发中,提高用户界面的友好性和数据录入的准确性是至关重要的。为了达到这一目的,PB提供了一种非常实用的功能——下拉...

Global site tag (gtag.js) - Google Analytics