27.Wincc V7.3 MSHFGrid 插入一列模拟的复选框

标签:
winccvbsmshfgrid插入复选框列 |
分类: 西门子软硬件 |
前几天一个群友讨论了一个问题:上级管理系统(ERP、MES)下达了一个生产指标,存放在SQL Server数据库中,WINCC通过表格控件读取了这个数据库,然后操作人员在表格里面选取某些行,再进一步把这些数据传递给WINCC变量,他希望能够在表格控件中有一列是checkbox用于用户交互式选择。通过网上查询资料,VB.NET控件中有system.windows.forms.datagrid,通过重新设计其模板可以做出希望的效果,但WINCC似乎不支持VB.NET脚本,反复尝试始终不行。于是转换思路,使用Micosoft Hierarchical Flexgrid控件也可以做出相似的效果,像下图的样子:
鼠标点击MSHFGrid控件来进行勾选和取消操作,下面就简略写一下过程。
一 准备过程
1. 数据库准备
数据库首先得有一张表,数据库与ERP等系统通讯不在本例考虑范围
2. Wincc准备
二 脚本
1. 读取数据库和增加列脚本
Sub OnClick(ByVal
Item)
Dim conn
Dim ssql
Dim ors
Dim ocom
Dim scon
Dim HFGrid
Dim ADODC
Dim PCName
PCName=HMIRuntime.Tags("@LocalMachineName").Read
scon="Provider = SQLOLEDB.1;Integrated Security=SSPI;Persist
SecurityInfo=False;Initial Catalog =MyDB;Data Source = "
&PCName & "\WINCC"
ssql="select * from checkboxtable"
Set conn=CreateObject("ADODB.Connection")
conn.ConnectionString=scon
conn.Cursorlocation=3
conn.open
Set ors=CreateObject("ADODB.RecordSet")
Set ocom=CreateObject("ADODB.Command")
ocom.commandtype=1
Set ocom.ActiveConnection=conn
ocom.CommandText=ssql
Set ors=ocom.Execute
Set HFGrid=ScreenItems("MSHFGrid")
Set HFGrid.DataSource=ors
HFGrid.Refresh
Set ors=Nothing
conn.close
Set conn=Nothing
' 增加一列用于勾选
hfgrid.Cols = hfgrid.Cols + 1
hfgrid.TextMatrix(0,5)="点击选择"
End Sub
3. 勾选和取消操作脚本
Sub Click(ByVal
Item)
Dim hfgrid
Dim hid,vid
Set hfgrid=ScreenItems("MSHFGrid")
hid=hfgrid.Row
vid=hfgrid.col
'根据点击单元格的行号列号判断点击选取的单元格是不是特定的单元格
If (hid>=1 And hid<=hfgrid.rows-1) And vid=hfgrid.Cols-1
Then
End If
End Sub
4. 进一步处理
用户操作结束后,可以根据巡视单元格.TextMatrix(x,y)数值是否为"x",判断哪些行数据被选中,便于进一步处理,这里就不再阐述了。