GridControl是AVEVA封装的一个内置的列表控件,其效果类似于C#里的grid控件。这样就可以在PML里面实现列表的功能,其功能要远远强于普通的LIST控件,当然其实现也比较复杂。
前置条件
导包
需要在使用前,将DLL文件加载到内存中。
import 'GridControl'
import 'Aveva.Pdms.DataManagement.PML'
窗体定义
FRAME .frmPipe '管线清单'
using namespace 'Aveva.Pdms.Presentation'
CONTAINER .conPipeGrid pmlnetControl 'pipegrid' dock fill Width 50 Height 12
exit
- 最好用一个frame将grid控件包含在里面。
- 需要加入命名空间。
- 由于gridcontrol是C#控件,因此他的对象类型必须是CONTAINER。
- 需要在窗体中定义一个全局变量,用于绑定该控件。
member .pipeGrid is NetGridControl
构造函数
需要在窗体的构造函数里面,绑定控件的句柄。这也是PML和C#交互的必要条件。
using namespace 'Aveva.Pdms.Presentation'
!this.pipeGrid = object NetGridControl()
!this.conPipeGrid.Control = !this.pipeGrid.handle()
绑定数据
using namespace 'Aveva.Pdms.Presentation'
!head[1] = 'Name'
!head[2] = 'Sex'
!content[1][1] = '张三'
!content[1][2] = '男'
!content[2][1] = '李四'
!content[2][2] = '女'
!nds = object NetDataSource('Pipe List', !head, !content)
!this.pipeGrid.BindToDataSource(!nds)
- grid的title是第二个参数,必须为数组。该参数为可选。
- grid的内容是第三个参数,必须是一个二维数组。
- 第三个参数可以是一个读取自excel的file对象。
绑定事件
gridcontrol
控件,也支持事件,这些事件以委托的方式实现PML与C#的交互。
右键事件
定义MENU
这里和普通的PML弹窗没有多大的差异。
MENU .pipeGridPopup Popup
!this.pipeGridPopup.Add('Callback', '检查', '!this.checkPipe()')
!this.pipeGridPopup.Add('Callback', '强制通过', '!this.forcePass()')
绑定句柄
!this.pipeGrid.AddEventHandler('OnPopup', !this, 'eventConPipeGridRightClick')
- 第一个参数OnPopup表明是右键事件。
- 第二个参数是固定写法。
- 第三个参数,是右键的弹出事件。注意这个方法没有()
注册事件
define method .eventConPipeGridRightClick(!data is ARRAY)
!this.conPipeGrid.Popup = !this.pipeGridPopup
!this.conPipeGrid.ShowPopup(!data[0], !data[1])
endmethod
选择后事件
绑定句柄
!this.pipeGrid.AddEventHandler('AfterSelectChange', !this, 'eventConPipeGridAfterSelectChange')
注册事件
define method .eventConPipeGridAfterSelectChange(!data is ARRAY)
q var !data[0]
endmethod
这里!data
是用户选择的,下标是从0开始的行号数组,如果grid是单选,则该数组永远只有一个元素。
属性
属性 | 说明 | 备注 |
---|---|---|
!this.pipeGrid.ColumnExcelFilter(true) | 是否开启表格头部的筛选功能 | |
!this.pipeGrid.FixedHeaders(true) | 是否固定表格头部 | |
!this.pipeGrid.FixedRows(false) | 是否固定行数 | |
!this.pipeGrid.ColumnSummaries(true) | 是否在表格的下方汇总行数 | |
!this.pipeGrid.SingleRowSelection(false) | 表格是单选还是多选 | |
!this.pipeGrid.HideGroupByBox(true) | 是否开启分组排序功能 |
方法
GET
方法 | 返回值 | 备注 |
---|---|---|
getSelectedRows() | 二维数组 | 获取选择的行的数据 |
getRow(real row) | 一维数组 | 获取指定行的数据 |
getCell(real row, real column) | string | 获取指定单元格的值 |
getRows() | 二维数组 | 获取grid的所有数据 |
SET
方法 | 返回值 | 备注 |
---|---|---|
setCellImage(real row, real column, string imagePath) | 设置指定单元格的图片 | |
SetColumnWidth(real column, real width) | 设置列的宽度 | |
getCell(real row, real column) | string | 获取指定单元格的值 |
操作
方法 | 返回值 | 备注 |
---|---|---|
ClearGrid() | 清除grid的所有数据(包括表头和数据) | |
SaveGridToExcel(FILE file) | 将grid的数据,导出生成一个外部excel文件 |