以下程序用于用记录集填充msflexgrid表格,参数一为表格控件名,参数二为ado记录集名.
Public Function datatogrid(pGrid As MSHFlexGrid, rs As ADODB.Recordset) As Boolean
'本函数特别要求,对于含的小数点的数值型数据,要补足小数点后两位
'功能:将记录添充到表格中
'接收参数:表格名称和记录集
'表头内容全部居中,其余单元格根据类型居左或居右
Dim i As Integer, j As Integer, str As String 'str用于存放字段内容
Dim rscol As Integer '字段的序号,不是表格列的序号
On Error GoTo gherr
'首先判断记录集是否有内容[如果无内容则不做任何操作就直接返回]
If rs.RecordCount < 1 Then
datatogrid = False
Exit Function
End If
'下面进行表格填充
pGrid.Redraw = False '不重绘,目的是提高速度
With pGrid
.Clear
.FixedRows = 1 '固定行
.Row = 1 '活动单元行
.Col = 1 '活动单元列
rs.MoveLast
rs.MoveFirst '移动记录,如果不移动,有时候RecordCount会统计不准确
.Cols = rs.Fields.Count + 1 '设定表格列数,统计字段数量,列数要比字段数多一个,第一列为空列,当记录指示器用
.Rows = rs.RecordCount + 1 '该设定决定表格有多少行显示数据,很重要
.TextMatrix(0, 0) = "" '设定第0列表头,为空
'添加各个字段的名称[添加表头]
For i = 1 To rs.Fields.Count '循环显示字段名称,有多少个字段则循环多少次
'i就是表格的当前列,第0列是记录指示器,不在本循环中处理
rscol = i - 1 '比如第1列存放的是rs(0)的内容,故有i-1的关系
.Row = 0
.Col = i
.CellAlignment = 4 '表头都设成居中对齐
.TextMatrix(0, i) = rs.Fields(rscol).Name '显示字段名称
Next
'第一行放字段名,再加上记录数,就是表格应有的总行数
For i = 1 To rs.RecordCount '循环显示记录,有多少条记录则循环多少次
.Row = i '当前行随着添充数据走
'第0列做记录指示器用,不填充数据,所以每一行都从第一列开始填
For j = 1 To rs.Fields.Count '循环处理各个列
.Col = j '表格定位到相应的列
rscol = j - 1 '字段的序号,第一列对应rs的第0列字段,故有j-1的关系
'根据不同的类型,设置不同的格式
Select Case rs.Fields(rscol).Type
Case adDecimal, adDouble, adSingle, adNumeric
'设定为右对齐
.CellAlignment = 7
If Val(rs.Fields(rscol).Value & "") = 0 Then '为0要不显示
str = ""
Else
'根据数据库中的字段小数位数的定义设置格式
Select Case rs.Fields(rscol).NumericScale
Case 1
str = Format(Trim(rs.Fields(rscol) & ""), "#0.0")
Case 2
str = Format(Trim(rs.Fields(rscol) & ""), "#0.00")
Case 3
str = Format(Trim(rs.Fields(rscol) & ""), "#0.000")
Case Else
str = Format(Trim(rs.Fields(rscol) & ""), "#0.0#")
End Select
End If
Case adBigInt, adInteger, adTinyInt, adSmallInt
'设定为右对齐
.CellAlignment = 7
If Val(rs.Fields(rscol).Value & "") = 0 Then '为0要不显示
str = ""
Else
str = Trim(rs.Fields(rscol).Value & "")
End If
Case Else
'设定为左对齐
.CellAlignment = 1
str = Trim(rs.Fields(rscol).Value & "")
End Select
.TextMatrix(i, j) = str
Next
rs.MoveNext '显示下一条记录
Next
'设定第几行显示在最前面(用toprow属性)
.TopRow = 1
datatogrid = True '返回true
End With
pGrid.Redraw = True '填完数据后,充许重绘
Exit Function
gherr:
datatogrid = False
End Function
Public Function datatogrid(pGrid As MSHFlexGrid, rs As ADODB.Recordset) As Boolean
'本函数特别要求,对于含的小数点的数值型数据,要补足小数点后两位
'功能:将记录添充到表格中
'接收参数:表格名称和记录集
'表头内容全部居中,其余单元格根据类型居左或居右
Dim i As Integer, j As Integer, str As String 'str用于存放字段内容
Dim rscol As Integer '字段的序号,不是表格列的序号
On Error GoTo gherr
'首先判断记录集是否有内容[如果无内容则不做任何操作就直接返回]
If rs.RecordCount < 1 Then
datatogrid = False
Exit Function
End If
'下面进行表格填充
pGrid.Redraw = False '不重绘,目的是提高速度
With pGrid
.Clear
.FixedRows = 1 '固定行
.Row = 1 '活动单元行
.Col = 1 '活动单元列
rs.MoveLast
rs.MoveFirst '移动记录,如果不移动,有时候RecordCount会统计不准确
.Cols = rs.Fields.Count + 1 '设定表格列数,统计字段数量,列数要比字段数多一个,第一列为空列,当记录指示器用
.Rows = rs.RecordCount + 1 '该设定决定表格有多少行显示数据,很重要
.TextMatrix(0, 0) = "" '设定第0列表头,为空
'添加各个字段的名称[添加表头]
For i = 1 To rs.Fields.Count '循环显示字段名称,有多少个字段则循环多少次
'i就是表格的当前列,第0列是记录指示器,不在本循环中处理
rscol = i - 1 '比如第1列存放的是rs(0)的内容,故有i-1的关系
.Row = 0
.Col = i
.CellAlignment = 4 '表头都设成居中对齐
.TextMatrix(0, i) = rs.Fields(rscol).Name '显示字段名称
Next
'第一行放字段名,再加上记录数,就是表格应有的总行数
For i = 1 To rs.RecordCount '循环显示记录,有多少条记录则循环多少次
.Row = i '当前行随着添充数据走
'第0列做记录指示器用,不填充数据,所以每一行都从第一列开始填
For j = 1 To rs.Fields.Count '循环处理各个列
.Col = j '表格定位到相应的列
rscol = j - 1 '字段的序号,第一列对应rs的第0列字段,故有j-1的关系
'根据不同的类型,设置不同的格式
Select Case rs.Fields(rscol).Type
Case adDecimal, adDouble, adSingle, adNumeric
'设定为右对齐
.CellAlignment = 7
If Val(rs.Fields(rscol).Value & "") = 0 Then '为0要不显示
str = ""
Else
'根据数据库中的字段小数位数的定义设置格式
Select Case rs.Fields(rscol).NumericScale
Case 1
str = Format(Trim(rs.Fields(rscol) & ""), "#0.0")
Case 2
str = Format(Trim(rs.Fields(rscol) & ""), "#0.00")
Case 3
str = Format(Trim(rs.Fields(rscol) & ""), "#0.000")
Case Else
str = Format(Trim(rs.Fields(rscol) & ""), "#0.0#")
End Select
End If
Case adBigInt, adInteger, adTinyInt, adSmallInt
'设定为右对齐
.CellAlignment = 7
If Val(rs.Fields(rscol).Value & "") = 0 Then '为0要不显示
str = ""
Else
str = Trim(rs.Fields(rscol).Value & "")
End If
Case Else
'设定为左对齐
.CellAlignment = 1
str = Trim(rs.Fields(rscol).Value & "")
End Select
.TextMatrix(i, j) = str
Next
rs.MoveNext '显示下一条记录
Next
'设定第几行显示在最前面(用toprow属性)
.TopRow = 1
datatogrid = True '返回true
End With
pGrid.Redraw = True '填完数据后,充许重绘
Exit Function
gherr:
datatogrid = False
End Function