'记录集未打开,则返回错误
If rs.State <> adStateOpen Then
MsgBox "没有可供显示的记录集!", 32, "提示"
RsFillFlex2 = False
Exit Function
End If'首先判断记录集是否有内容[如果无内容要清除表格原有内容],因为记录集正常打开的情况下,也可能一条记录都没有
If rs.BOF = True And rs.eof = True Then
grd.Rows = grd.FixedRows '清除除表头的所有内容
grd.Rows = Rows_Fixed + 1 '无记录时,显示一个空白行
RsFillFlex2 = True
Exit Function
End If'注意:不能设置固定行,否则会报错[设置固定行时,除非固定行比行数小一,否则报错]With grd
.Rows #p#分页标题#e#= .FixedRows '将行数设置成固定行的行数
.Clear '清除原有内容[重要]
.FormatString = strcaption '格式化表头,确定列数
grdCols = .Cols '取表格列数
rsCols = rs.Fields.Count '记录集字段数
'判断传来的表头与记录集的字段数是否一致
If grdCols <> rsCols + 1 Then
' MsgBox grdcols
' MsgBox rscols
MsgBox "记录集字段数与表格列数不匹配,表格列数应比记录集列数多1,第0列为序号列!", 16, "提示"
RsFillFlex2 = False
Exit Function
End If'下面进行表格填充[只有在真正填充之前,才能设置成不重绘,否则容易花屏]
.Redraw = False '不重绘,目的是提高速度Rows = rs.RecordCount + TableHead '该设定决定表格有多少行显示数据,很重要If alignFlag = 1 Then
For j = 1 To rs.Fields.Count
Select Case rs.Fields(j - 1).Type
Case adDecimal, adDouble, adSingle, adNumeric, adBigInt, adInteger, adTinyInt, adSmallInt
'设定为右对齐
.ColAlignment(j) = 7
Case Else
#p#分页标题#e#'设定为左对齐
.ColAlignment(j) = 1
End Select
Next
End Ifrs.MoveFirst
For i = 1 To rs.RecordCount '循环显示记录,有多少条记录则循环多少次
.TextMatrix(i, 0) = i '第0列显示序号
For j = 1 To rs.Fields.Count '循环处理各个列
'取单元格的值
vnttmp = Trim(rs.Fields(j - 1).Value & "")
'根据不同的类型,设置不同的格式显示
Select Case rs.Fields(j - 1).Type
Case adDecimal, adDouble, adSingle, adNumeric
If Val(vnttmp) = 0 Then
If showZeroFlag = 0 Then
strField = ""
Else
'根据数据库中的字段小数位数的定义设置格式[注意:要对小数位数为0进行处理]
Select Case rs.Fields(j - 1).NumericScale
Case 0
strField = Format(vnttmp, "#")
#p#分页标题#e#Case 1
strField = Format(vnttmp, "#0.0")
Case 2
strField = Format(vnttmp, "#0.00")
Case 3
strField = Format(vnttmp, "#0.000")
Case Else
strField = Format(vnttmp, "#0.000#")
End Select
End If
Else
'根据数据库中的字段小数位数的定义设置格式[注意:要对小数位数为0进行处理]
Select Case rs.Fields(j - 1).NumericScale
Case 0
strField = Format(vnttmp, "#")
Case 1
strField = Format(vnttmp, "#0.0")
Case 2
strField #p#分页标题#e#= Format(vnttmp, "#0.00")
Case 3
strField = Format(vnttmp, "#0.000")
Case Else
strField = Format(vnttmp, "#0.000#")
End Select
End If
Case adBigInt, adInteger, adTinyInt, adSmallInt
If Val(vnttmp) = 0 Then
If showZeroFlag = 0 Then
strField = ""
Else
strField = vnttmp
End If
Else
strField = vnttmp
End If' Case adBoolean
' '布尔值
' strField = IIf(vnttmp = True, "是", "否")
' Case adDBTimeStamp
' '日期时间值#p#分页标题#e#
' strField = Left(Format(vnttmp, "yyyy/mm/dd"), 10)
Case Else
strField = vnttmp
End Select
.TextMatrix(i, j) = strField
Next
rs.MoveNext '显示下一条记录
Next'设定第几行显示在最前面(用toprow属性)
.TopRow = Rows_Fixed
'以下代码运行的前提是:已有记录
'确定表格总行数[因为存在表头,故表数行数应等于记录条数加一]
.
'根据参数决定是否设置各列对齐方式,为1时不按formatstring设置,按记录集字段类型设置
' '使表头各列居中
' .Row = 0
' For j = 0 To .Cols - 1
' '.FixedAlignment(j) = 4
' .Col = j
' .CellAlignment = 4
' Next
.Redraw = True '填完数据后,充许重绘
RsFillFlex2 = True '返回true
End Witherrhandler:
grd.Clear
grd.Rows = grd.FixedRows '清除除表头的所有内容
grd.Rows = Rows_Fixed + 1 '无记录时,显示一个空白行
grd.Redraw = True '出错后如果不设置成充许重绘,则会花屏
RsFillFlex2 = #p#分页标题#e#False
MsgBox "发生错误:" & Err.Description
End Function
Exit Function
Dim i As Long, j As Long, strField As String 'strField用于存放字段内容
评论 {{userinfo.comments}}
{{child.content}}
{{question.question}}
提交