加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

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

(2016-04-12 14:02:06)
标签:

wincc

vbs

mshfgrid

插入复选框列

分类: 西门子软硬件

前几天一个群友讨论了一个问题:上级管理系统(ERP、MES)下达了一个生产指标,存放在SQL Server数据库中,WINCC通过表格控件读取了这个数据库,然后操作人员在表格里面选取某些行,再进一步把这些数据传递给WINCC变量,他希望能够在表格控件中有一列是checkbox用于用户交互式选择。通过网上查询资料,VB.NET控件中有system.windows.forms.datagrid,通过重新设计其模板可以做出希望的效果,但WINCC似乎不支持VB.NET脚本,反复尝试始终不行。于是转换思路,使用Micosoft Hierarchical Flexgrid控件也可以做出相似的效果,像下图的样子:

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

鼠标点击MSHFGrid控件来进行勾选和取消操作,下面就简略写一下过程。

 

一 准备过程

1. 数据库准备

数据库首先得有一张表,数据库与ERP等系统通讯不在本例考虑范围

2. Wincc准备

  wincc控件默认没有这货,需要在页面编辑器右边Activex控件通过“添加/删除”勾选出来,如果实际使用提示没有授权,那么需要安装一个VB补丁,或者安装一下VB6软件,补丁是一个注册表文件,网上搜索一下就可以找到。

  wincc页面上放置一个Micosoft Hierarchical Flexgrid控件,名字修改为MSHFGrid。

 

二 脚本

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)="点击选择"  ‘本例实现可以确定字段数目,因此可以确定新增字段的列号为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
   If hfgrid.TextMatrix(hid,vid)="" Then
       hfgrid.TextMatrix(hid,vid)="x"  'x表示选择上
       hfgrid.ColAlignment(vid)=3  '居中
   Else
       hfgrid.TextMatrix(hid,vid)=""
   End If
End If
End Sub

 

4. 进一步处理

用户操作结束后,可以根据巡视单元格.TextMatrix(x,y)数值是否为"x",判断哪些行数据被选中,便于进一步处理,这里就不再阐述了。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有