# 方法和属性

H5DW包括很多方法,开发人员通过调用方法操作数据窗口。

H5DW的方法和PowerBuilder数据窗口事件一致,熟悉PB的开发人员可以快速上手。

以下提到的DWBufferDWItemStatus定义如下,下面函数不再单独说明。可以H5DW的导出对象中获取,也可以自己定义。

export const DWBuffer = {
	Primary:0,
	Delete:1,
	Filter:2
}
export const DWItemStatus = {
    NotModified:0,
    DataModified:1,
    New:2,
    NewModified:3
}

# 方法

# create

create方法根据数据窗口语法创建数据窗口对象。

参数名称 类型 说明
syntax string/object 类型为string时,为pb数据窗口语法。类型为object时,为json对象
return int 成功返回1,失败返回-1
let syntax = dwstr //pb数据窗口语法,一般从服务端返回
let dw = new DataWindow('#datawindow');
dw.create(syntax);

# setTransObject

设置事务,浏览器前端的对象一般是实现retrieveDWupdateDW方法的对象,用于从服务端获取、保存数据。

参数名称 类型 说明
dbo object 事务对象
let db = {
    async retrieveDW(sql,...arg) {
        //数据窗口retrieve时会调用,在客户端实际与服务器对接
        console.log('请求Key:',sql,...arg);
        let ret = await  axios.post('/h5dw/retrieve',{key:sql,args:arg});
        if (ret.status === 200) {
          return ret.data.data;
        } else {
          return [];
        }
    },
    async updateDW(key, data) {
        let ret = await axios.post('/h5dw/update',{key,data});
        if (ret.status === 200) {
          return ret.data.code;
        }
        return 1;
    },
};
dw.setTransObject(db);

# retrieve

从数据库中检索数据窗口控件或数据存储的行。客户端的datawindow因为要通过webapi从服务端检索数据,所以是异步函数,如果检索完成需要等待返回值,或者操作数据,需要使用await函数

参数名称 类型 说明
args Any 如果包含参数,则参数值用于SQL SELECT语句的检索参数,用于数据窗口对象或子数据窗口(可选)
返回值 int 成功返回显示的行数(即主缓冲区中的行数),失败返回-1
await dw.retrieve();

// 多个参数
await dw.retrieve(1,'name');

# update

更新数据库中的数据窗口或数据存储的更改。更新操作还可以在更新数据库之前对当前行和列调用AcceptText。客户端的datawindow因为要通过webapi从服务端更新数据,所以是异步函数,如果检索完成需要等待返回值,或者操作数据,需要使用await函数

参数名称 类型 说明
accept Boolean 是否自动执行AcceptTextTRUE(默认)执行AcceptText。如果数据验证失败,则取消更新。FALSE不执行AcceptText。
resetflag Boolean 是否自动重置更新标志TRUE(默认)重置标志。FALSE不重置标志。
返回值 int 成功返回1,失败返回-1
const r = await dw.update();
console.log(r);

# setDataObject

设置数据窗口对象。如果对象为json则给值,如果是string类型则通过调用webapi从服务端获取,所以是异步函数,如果检索完成需要等待返回值,需要使用await函数。

参数名称 类型 说明
value String/Object 数据窗口对象的名称或者json对象。当value参数为数据窗口名称时,通过实现dwGetDataObject从服务端获取数据窗口对象数据
// 示例中实现dwGetDataObject方法
window.dwGetDataObject =  async (key) => {
  let ret = await axios.get(`/h5dw/dataobject?key=` + key);
  if (ret.status === 200) {
    return ret.data.data.dataobject;
  } else {
    return null;
  }
}

await dw1.setDataObject('d_test1');

# rowCount

获取当前数据窗口的行数。

参数名称 类型 说明
返回值 int 数据行数
dw.rowCount();

# setItem

给数据窗口赋值

参数名称 类型 说明
row int 数据行数
column String/Number/Object 列名称/列号/json对象
value String/Number 数据值
返回值 int 成功返回1,失败返回-1
dw1.setItem(1,'name','Jake')
dw1.setItem(1,{'name':'Jake','sex':0})

# getItem

获取指定行和列的数据项的值

参数名称 类型 说明
row int 数据行数
column String/Number 列名称/列号
返回值 Object 返回指定行和列的值,数据类型与列的数据类型一致,出错时返回空字符串("")
dw1.getItem(1,'name')

# setItemStatus

修改行或行中列的修改状态

参数名称 类型 说明
row int 数据行数
column String/Number 列名称/列号(若为0,则设置整行的状态)
dwbuffer DWBuffer 包含该行的DataWindow缓冲区
status DWItemStatus/int/String 新的状态值(PowerBuilder中为DWItemStatus枚举数据类型,Web ActiveX中为整数,Web DataWindow中为字符串)
返回值 int/NULL 成功返回1,失败返回-1;若任何参数值为NULL,则在返回NULL
dw1.setItemStatus(1,'name',DWBuffer.Primary, DWItemStatus.DataModified);

# getItemStatus

获取行或列中的修改状态

参数名称 类型 说明
row int 指定要获取状态的行
column String/Number 指定要获取状态的列。可以是列号或列名。指定0以获取整行的状态。
dwbuffer DWBuffer 包含行的DataWindow缓冲区
返回值 Number/NULL 返回dwItemStatus枚举数据类型。如果任何参数值为NULL,返回NULL。
const status = dw1.getItemStatus(1,'name',DWBuffer.Primary);

# insertRow

插入行

参数名称 类型 说明
row int 指定要插入行之前的位置。要在末尾插入行,请指定0
返回值 int 成功返回添加的行号,失败返回-1

# deleteRow

删除行

参数名称 类型 说明
row int 指定要删除的行。要删除当前行,请为row指定0
返回值 int 成功返回1,失败返回-1

# resetUpdate

重置更新标志并清空删除缓冲区

参数名称 类型 说明
返回值 int 成功返回1,失败返回-1

# reset

清空DataWindow控件或DataStore对象中的所有数据

参数名称 类型 说明
返回值 int 成功返回1,失败返回-1(通常不使用返回值)

# setRow

设置DataWindow控件或DataStore对象的当前行

参数名称 类型 说明
row int 指定要设置的行
返回值 int 成功返回当前行号,无当前行返回0,失败返回-1

# scrollToRow

滚动DataWindow控件到指定行

参数名称 类型 说明
row int 指定要滚动的行。如果row为0,则滚动到第一行。如果row大于最后一行行号,则滚动到最后一行
返回值 int 成功返回滚动到的行号,失败返回-1

# scrollPriorRow

向上滚动DataWindow控件一行

参数名称 类型 说明
返回值 int 滚动完成后返回显示在DataWindow控件顶部的行号,如果尝试滚动到第一行之前则返回-1

# scrollNextRow

向下滚动DataWindow控件一行

参数名称 类型 说明
返回值 int 滚动完成后返回显示在DataWindow控件顶部的行号,如果尝试滚动到最后一行之后则返回-1

# getRow

获取DataWindow对象或报表中与某个带区关联的行号

参数名称 类型 说明
返回值 int 成功返回行号,无数据检索或添加返回0,失败返回-1

# currentRow

获取DataWindow控件或DataStore对象的当前行号(焦点行)

参数名称 类型 说明
返回值 number 成功返回当前行号,无当前行返回0

# selectRow

选择或取消选择DataWindow控件或DataStore中的行

参数名称 类型 说明
row int 指定要选择或取消选择的行。指定0以选择或取消选择所有行
select Boolean 确定是否选择行(true为选择,false为取消选择)
返回值 int 成功返回1,失败返回-1

# isSelected

判断DataWindow或DataStore中的行是否被选中

参数名称 类型 说明
row int 指定要判断的行。指定0表示判断所有行。如果行号大于DataWindow中的行数或为0或负数,isSelected也返回false。
返回值 Boolean 如果DataWindow控件中的行被选中,则返回true;否则返回false。

# shareData

共享DataWindow控件(或DataStore)检索的数据

参数名称 类型 说明
dwsecondary DataStore 与主DataWindow共享数据的次DataWindow。控件不共享格式,只共享数据,包括主缓冲区、删除缓冲区、过滤缓冲区和排序顺序中的数据。
返回值 int 成功返回1,失败返回-1。

# shareDataOff

关闭DataWindow控件或DataStore的数据缓冲区共享

参数名称 类型 说明
返回值 int 成功返回1,失败返回-1。

# rowsMove

移动DataWindow控件(或DataStore)中的行范围到另一个DataWindow控件(或DataStore)中,或在单个DataWindow控件(或DataStore)内从一个缓冲区移动到另一个缓冲区

参数名称 类型 说明
startrow int 要移动的第一行的行号。
endrow int 要移动的最后一行的行号。
movebuffer DWBuffer 指定要移动行的DataWindow缓冲区的值(PowerBuilder中的枚举数据类型或Web ActiveX中的整数)。
targetdw DataStore 要将行移动到的DataWindow控件或DataStore的名称。可以是相同的DataWindow控件(或DataStore)或不同的DataWindow控件(或DataStore),但不能是子DataWindow。
beforerow int 要在其之前插入移动行的行号。要在最后一行之后插入,请使用大于现有行数的任何值。
targetbuffer DWBuffer 指定目标缓冲区的值(PowerBuilder中的枚举数据类型或Web ActiveX中的整数)。
返回值 int 成功返回1,失败返回-1。如果任何参数的值为NULL,在PowerBuilder和JavaScript中该方法返回NULL。
// 删除所有行,通过rowsMove移动到DWBuffer.Delete删除后,调用update会包括删除行,用rowsDiscard不会
dwMain.rowsMove(1,dwMain.rowCount(), DWBuffer.Primary, dwMain, 1, DWBuffer.Delete);

# rowsCopy

复制DataWindow控件(或DataStore对象)中的行范围到另一个DataWindow控件(或DataStore对象)中,或在单个DataWindow控件(或DataStore对象)内从一个缓冲区复制到另一个缓冲区

参数名称 类型 说明
startrow int 要复制的第一行的行号。
endrow int 要复制的最后一行的行号。
copybuffer DWBuffer 指定要复制行的DataWindow缓冲区的值(PowerBuilder中的枚举数据类型或Web ActiveX中的整数)。
targetdw DataStore 要将行复制到的DataWindow控件或DataStore的名称。可以是相同的DataWindow控件(或DataStore)或不同的DataWindow控件(或DataStore)。
beforerow int 要在其之前插入复制行的行号。要在最后一行之后插入,请使用大于现有行数的任何值。
targetbuffer DWBuffer 指定目标DataWindow缓冲区的值(PowerBuilder中的枚举数据类型或Web ActiveX中的整数)。
返回值 int 成功返回1,失败返回-1。如果任何参数的值为NULL,在PowerBuilder和JavaScript中该方法返回NULL。
// 复制dw1所有行到dw2的最后
dw1.rowsCopy(1,dw1.rowCount(), DWBuffer.Primary, dw2, dw2.rowCount() + 1, DWBuffer.Primary);

# rowsDiscard

丢弃DataWindow控件中的行范围

参数名称 类型 说明
startrow int 要丢弃的第一行的行号。
endrow int 要丢弃的最后一行的行号。
buffer DWBuffer(可选,默认为DWBuffer.Primary) 指定包含要丢弃行的DataWindow缓冲区的值(PowerBuilder中的枚举数据类型、Web ActiveX中的整数或Web DataWindow中的字符串)。
返回值 int 成功返回1,失败返回-1。
dwMain.rowsDiscard(1,dwMain.rowCount(), DWBuffer.Primary);

# setSort

设置数据窗口或数据存储的排序标准,排序在调用sort函数后生效

参数名称 类型 说明
format String 排序标准,包含列名或列号,列号前需加#
返回值 int 成功返回1,失败返回-1
dw1.setSort("name A");
dw1.setSort("#1 D");

# sort

按数据窗口当前排序标准排序数据窗口或数据存储的行

参数名称 类型 说明
返回值 int 成功返回1,失败返回-1,若dwcontrol为NULL,则返回NULL
dw1.setSort("name A")
dw1.sort();

# setFilter

设置数据窗口或数据存储的筛选标准

参数名称 类型 说明
format String 布尔表达式,作为筛选标准,包含列名或列号,列号前需加#
返回值 int 成功返回1,失败返回-1,若未分配DataWindow对象到DataWindow或DataStore,则返回-1,返回值通常不使用
dw1.setFilter("name = 'Jake'")

# filter

显示数据窗口中符合当前筛选标准的行,不符合筛选标准的行移至筛选缓冲区

参数名称 类型 说明
返回值 int 成功返回1,失败返回-1,返回值通常不使用
dw1.setFilter("name = 'Jake'")
dw1.filter();

# find

在数据窗口或数据存储中查找数据符合指定条件的下一行

参数名称 类型 说明
expression String 布尔表达式,作为搜索标准,包含列名
start int 开始搜索的行位置
end int 结束搜索的行位置,若end小于start,则向后搜索
返回值 int 返回在搜索范围内符合搜索标准的第一行的行号,若未找到则返回0,若发生错误则返回以下负数值:-1表示一般错误,-5表示参数错误
dw1.find("name = 'Jake'", 1, dw1.rowCount())

# deletedCount

报告在数据库中标记为删除的行数

参数名称 类型 说明
返回值 int 返回从dwcontrol中删除但尚未在相关数据库表中更新的行数,若未删除行或所有已删除行已在数据库中更新,则返回0,若失败则返回-1

# filteredCount

报告因当前筛选标准而未在数据窗口中显示的行数

参数名称 类型 说明
返回值 int 返回dwcontrol中因不符合当前筛选标准而未显示的行数,若所有行均显示,则返回0,若发生错误则返回-1

# filterAll

为所有数据列设置筛选文本。显示符合当前筛选文本的数据窗口行。

参数名称 类型 说明
text String 筛选文本

# modifiedCount

报告在DataWindow或DataStore中已修改但未更新的行数。

参数名称 类型 说明
返回值 int 返回主缓冲区中已修改的行数。如果没有行被修改或所有已修改的行都已在数据库表中更新,则返回0。如果发生错误,则返回-1。

# getChanges

检索对DataWindow或DataStore所做的更改,并将其作为blob返回。此方法主要用于分布式应用程序。

参数名称 类型 说明
data (参数未明确说明,通常为用于接收更改的对象或变量)
返回值 int 如果成功,返回DataWindow更改blob中的行数;如果失败,则返回以下值之一:-1表示内部错误。

# setChanges

将对GetChanges捕获的更改应用到DataWindow或DataStore。此方法主要用于分布式应用程序。

参数名称 类型 说明
data (参数未明确说明,通常为包含更改的blob)
返回值 int 返回以下值之一:1表示所有更改已应用;2表示部分更新成功,冲突的更改已被丢弃;-1表示方法失败;-2表示DataWindow更改blob的状态与DataWindow的状态之间存在冲突;-3表示列规范不匹配。

# describe

报告DataWindow对象及其内部控件的属性值。DataWindow中的每个列和图形控件都有一组属性。

参数名称 类型 说明
propertylist String 一个字符串,其值为属性或Evaluate函数的空白分隔列表。
返回值 String 返回一个字符串,其中包含每个属性或Evaluate函数的值。每个项目中的值由换行符(~n或\n)分隔。如果属性列表包含无效项,Describe将为该项返回一个感叹号(!)并忽略属性列表的其余部分。如果属性没有值,Describe将返回一个问号(?)。
// 获取数据源的列数
dw1.describe('datawindow.column.count')

//获取名称为dt_t对象的文本
dw1.describe('dt_t.text')

# 属性值包括

  • datawindow.column.count
  • datawindow.color
  • datawindow.readonly
  • column.text
  • column.tabsequence
  • column.visible
  • column.protect
  • column.height
  • column.dddw
  • column.background

# modify

通过应用作为指令列表给出的规范来修改DataWindow对象。

参数名称 类型 说明
modstring String 包含修改规范的字符串。有关适当格式的详细信息,请参阅PB用法。
返回值 String 如果成功,则返回空字符串("");如果失败,则返回错误消息。
// 修改名称为dt_t的文本为123
dw1.modify('dt_t.text="123"')

# evaluate

在DataWindow或DataStore中找到数据满足指定条件的下一行。

参数名称 类型 说明
expression String 一个字符串表达式,可以包含列名或列号。支持运算符、math对象的数学表达式、支持字符串的函数、日期函数。
n int 行号。将使用此列的列值。
返回值 String/Number 返回表达式结果。
dw1.evaluate('if(name="Jake", 1, 0)', 1) //如果名称为Jake,返回1,否则返回0

dw1.evaluate('price * 2', 1)  //如果第1行price数据为10,返回20

dw1.evalute('abs(-1)', 1) //取绝对值,返回1

dw1.evalute('ceil(1.2)', 1) //上取整,返回2

dw1.evaluate('pow(2, 3)', 1); //2的3次方,返回8

# setOption

设置DataWindow选项。

参数名称 类型 说明
key String/Object 选项名称,当key字符串时,value其值为选项值。当Key为json对象时,不需要设置value
value String 其值为选项值。

可设置选项

key 类型 说明
showFixedColHeader Boolean 是否显示固定列头,true为显示,false为不显示
showFixedRowHeader Boolean 是否显示固定行号,true为显示,false为不显示
showSelector Boolean 点击时是否显示选择框,true为显示,false为不显示
currentRowSelected Boolean 是否当前行被选中,true为选中,false为不选中
onlyShowCurrentRow Boolean 是否只显示当前行,true为只显示当前行,false为显示所有行,一般用于自由表格,只想看到当前行,如PB的FreeFrom格式
showHScrollBar Boolean 是否显示水平滚动条,true为显示,false为不显示
showVScrollBar Boolean 是否显示垂直滚动条,true为显示,false为不显示
dw1.setOption('showFixedColHeader', true)
dw1.setOption({'showFixedColHeader':true})

# setRedraw

设置DataWindow是否可以刷新

参数名称 类型 说明
redraw Boolean true或false

# design

改变设计模式

参数名称 类型 说明
value Boolean true或false

# isDesign

获取设计模式

参数名称 类型 说明
返回值 Boolean 设计模式

# print

发送DataWindow控件或DataStore对象的内容到打印机

参数名称 类型 说明
options Object 打印选项

options参数如下

{  
  orientation:'landscape',    // 'landscape' | 'portrait'  
  paperSize:'A4',   // 'A3' | 'A4' | 'A5' | 'A5' | 'B4' | 'B5' | 'Custom'  
  paperUser:{  
    width:'210mm',  
    height:'297mm',  
  },  
  margin: {  
    left:'12mm',  
    right:'12mm',  
    top:'12mm',  
    bottom:'12mm',  
  },  
  range:'1-20', // 1,3,1-20  
}
// 打印设置纸为A4,纵向打印
dw1.print({paperSize:'A4',orientation:'portrait'});

# 属性

# dataObject

设置或者获取数据窗口对象

 // 这里retrieve属性是SQL语句,服务端DataStore这样使用,客户端设置为key,如test1,
 // 服务端更新传入的test1进行检索
  let value = {
	      processing:1,
	      table:{
	  		retrieve:'select id,name,dt,price,des,num,bit from test1 order by id',
	  		update:'test1',
	  		updatewhere:2,
	  		updatekeyinplace:true,
	  		columns:[
	  			{name:'id',dbname:'id',type:'long',key:yes,update:true}
	  			{name:"name",dbname:'name',type:"string",update:true},
	  			{name:"age",type:"long",update:true},
	  			{name:"dt",type:"datetime",update:true},
	  			{name:'sex',type:"long",values:[{value:1,text:'男'},{value:0,text:'女'}]}
	  		]
	  	}
	  }
	  ds1.dataObject = value;

# data

设置或获取数据窗口数据

dw1.data = [
  {id:1, name:'张三',age:18,dt:'2018-01-01'},
  {id:2, name:'李明',age:20,dt:'2018-01-01'},
];

console.log(dw1.data);
//注意这里获取到的data并不是和传入的data一样,而是加入了行状态,数据如下
/*
[
  {status:0,data:{id:1, name:'张三',age:18,dt:'2018-01-01'}},
  {status:0,data:{id:2, name:'李明',age:20,dt:'2018-01-01'}},
]
*/