CSDN博客

img sharky19

L1006

发表于2004/10/6 11:28:00  655人阅读

//摘自昕晨论坛


要获得数据窗口的数据:
#在知道列或计算域名时得到数据
dwcontrol.Object.columnname {.buffer } {.datasource } { [ rownum ] }
其中datasource 参数表示数据源,它有两个可选项,Current(缺省)和Original,由此参数我们可以指定数据是从当前数据窗口上还是从数据库中得到。对于计算域,它不能被改变也没有当前值,所以我们必须指定为此参数为Original。

1、向数据窗口写入数据
dw_1.object.em_name[1]='中国pb学习中心'
2、从数据窗口获得数据
当前数据窗口中的数据放到数组当中
string    l_datawindow[]
l_datawindow[]=dw_1.object.em_name.current

下面语句得到emp_name在filter缓冲区的初始值(数据库中的值
string ls_namearray[]
ls_namearray = dw_1.Object.emp_name.Filter.Original

得到被选择项的值
表达式:dwcontrol.Object.columnname {.Primary }{.datasource }.Selected


下面语句可得到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))。

0 0

相关博文

我的热门文章

img
取 消
img