在Wincc页面上使用MSHFGrid控件可以读取数据库表,一般来说,显示效果是这样的:
有时候我们希望有表头,显示成这个样子:
这样的话,我们就需要在处理MSHFGrid控件时,多做一些处理。下面详细描述一下实现这种效果的步骤。
一 准备工作
假设SQL Server中有这样一张表
在WINCC页面上放置一个MSHFGrid控件,名字叫做MSHFGrid,一个按钮,按钮的点击事件VBS脚本如下:
Sub OnClick(ByVal Item)
Dim conn
Dim ssql
Dim ors
Dim ocom
Dim scon
Dim MSHFGrid
Dim ADODC
Dim PCName
Dim i,j,InsertRowCount,colcount
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 charttable"
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 MSHFGrid=ScreenItems("MSHFGrid")
Set MSHFGrid.DataSource=ors
MSHFGrid.Refresh
MSHFGrid.colwidth(1)=2500
Set ors=Nothing
conn.close
Set conn=Nothing
‘以下代码添加表头
InsertRowCount=3 ‘插入两行
For i=1 To InsertRowCount
MSHFGrid.AddItem "",1
Next
‘写“表头”
For i=1 To MSHFGrid.Cols-1
MSHFGrid.TextMatrix(3,i)=MSHFGrid.TextMatrix(0,i)
Next
For i=1 To MSHFGrid.Cols-1
MSHFGrid.TextMatrix(0,i)="" ‘去掉原有的“表头”
Next
colcount=MSHFGrid.Cols
MSHFGrid.MergeCells= 1 ‘合并方式为*合并
For j=1 To colcount-1
MSHFGrid.TextMatrix(1,j)="***装置工艺参数表"
MSHFGrid.TextMatrix(2,j)="查询时间:" & Now
Next
MSHFGrid.Mergerow(1)=True ‘第一行合并
MSHFGrid.Mergerow(2)=True ‘第二行合并
‘MSHFGrid.AllowUserResizing=3 ‘行高列宽皆可调整
MSHFGrid.Row=1
MSHFGrid.Col=1
‘单元格对齐方式 CellAlignment
‘0 左,顶部
‘1 左,居中
‘2 左,底部
‘3 居中,顶部
‘4 居中,居中
‘5 居中,底部
‘6 右,顶部
‘7 右,居中
‘8 右,底部
‘9 默认方式:也即字符串左,居中;数值右,居中
MSHFGrid.CellAlignment=4 ‘水平居中,垂直居中
MSHFGrid.Row=2
MSHFGrid.Col=1
MSHFGrid.CellAlignment=7
‘设置表头两行行高
MSHFGrid.Row=1
MSHFGrid.CellFontSize =14
MSHFGrid.Row=2
MSHFGrid.CellFontSize =14
MSHFGrid.RowHeight(1)=600
MSHFGrid.RowHeight(2)=600
End Sub