搬家第二天-36.Wincc V7.3 MSHFGrid数据显示的格式问题

我们在Wincc中使用MSHFGrid控件时,有时候读取上来的数据显示出来是这个样子的。

读取出来的数据有的整数部分0被舍去,有的小数位数太多很难看,这样我们就需要在读取数据表的时候对数据格式做一下处理,读取数据表的方式也需要做一下修改。下面就介绍如何处理数据显示乱的问题。

 

一 准备工作

假设SQL Server中有这样一张表。

它的数据是这个样子:

可以看出,原表中有0,有很小的数据,有小数位数多的数据。

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
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 NumberFormat"
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")
'MSHFGrid表格大小处理
MSHFGrid.cols=ors.fields.count+1
MSHFGrid.Rows=ors.recordcount+1


'MSHFGrid 表头处理
MSHFGrid.TextMatrix(0,1)="日期时间"
MSHFGrid.TextMatrix(0,2)="流量"
MSHFGrid.TextMatrix(0,3)="压力"
MSHFGrid.TextMatrix(0,4)="液位"
MSHFGrid.TextMatrix(0,5)="电流"

'处理数据显示格式,数据库中.fields编号从0开始
ors.movefirst  '从第一条记录开始

'第一列日期时间
For i=1 To ors.recordcount
 MSHFGrid.TextMatrix(i,1)=ors.fields(0) '日期时间不需要格式处理
 ors.movenext   '下一条记录
Next
ors.movefirst
For i=1 To ors.recordcount
   For j=2 To ors.fields.count
     MSHFGrid.TextMatrix(i,j)=Formatnumber(ors.fields(j-1),2,-1) 
   Next
   ors.movenext '下一条记录
Next

MSHFGrid.Refresh
MSHFGrid.colwidth(1)=2500
Set ors=Nothing
conn.close
Set conn=Nothing

End Sub

 

'重要的函数Formatnumber使用了三个参数,第一个是要转换的数字,第二个是保留几位小数,第三个是设定是否需要对整数部分为0时显示0(-1 显示0,  0不显示,1根据操作系统设定)

保存运行,现在的效果是这样子:

 

posted @ 2021-01-30 20:44  来自金沙江的小鱼  阅读(703)  评论(0编辑  收藏  举报