您的位置:首页 > 编程语言

针对MSHFlexGrid的一系列通用方法-项目中实践代码分享

2013-11-14 13:49 501 查看
1.给MSHFlexGrid填充数据通用方法

'自定义报表填充程序 fgrid
Public Function ShowformfData(Resultset As ADODB.Recordset, ary As Variant, fg As MSHFlexGrid) As Variant
Dim cl As field
Static GridSetup As Boolean
Dim MaxL As Long
Dim Op As Long
Dim rsl As ADODB.Recordset
Dim rows, sl, field_value As Variant
Dim i As Long
Dim j, k As Long

'On Error GoTo ShowDataEH
Set rsl = Resultset
'------------------------------------------
'等ERP系统全部导入到SQL SERVER 中才可用下面两行代码
'如果不连AS400 ,则直接用下面函数
If rsl.EOF Then
Exit Function
End If

ShowMSHFlexGrid fg, rsl, ary
Exit Function
'
fg.Clear
fg.Cols = 0
fg.rows = 2
fg.ScrollTrack = True
'fg.ScrollTrack = False
Op = 1
fg.Enabled = True
If rsl.EOF Then
MsgBox ("没有满足条件的记录,请重新修改您的查询条件")
fg.rows = 0
fg.Enabled = False
Exit Function
Else
fg.Visible = True
For i = 0 To rsl.Fields.count
fg.Cols = fg.Cols + 1
If i = 0 Then
fg.colwidth(0) = 800
Else

fg.Col = Op
If rsl.Fields(Op - 1).DefinedSize > 255 Then
MaxL = 1
Else
MaxL = rsl.Fields(Op - 1).ActualSize + 2
End If
If MaxL > 17 Then MaxL = 17
If MaxL < 9 Then MaxL = 9
fg.colwidth(fg.Col) = MaxL * 100
Op = Op + 1
End If
fg.TextMatrix(0, i) = ary(i)
'FG.TextMatrix(0, i) = rsl.Fields(i).Name

Next i
'Cols = fg.Cols + 1
'For I = 0 To rsl.Fields.Count
'fg.TextMatrix(0, I) = ary(I)
'Next I
fg.rows = 2
k = 1
If Not (rsl.BOF And rsl.EOF) Then
i = 0
Do While Not rsl.EOF

For j = 0 To rsl.Fields.count
If j = 0 Then
fg.TextMatrix(fg.rows - 1, j) = k
Else

If Not IsNull(rsl.Fields(j - 1).Value) Then
fg.TextMatrix(fg.rows - 1, j) = Trim(rsl.Fields(j - 1).Value)
End If
If rsl.Fields(j - 1).Type = adChar Then
fg.ColAlignment(j) = 0
End If

End If
Next j
fg.rows = fg.rows + 1
fg.TopRow = fg.TopRow + 1
fg.Refresh

rsl.MoveNext
k = k + 1
Loop
fg.rows = fg.rows - 1

End If

End If
If fg.rows > 4 Then
fg.TopRow = 1
fg.Refresh
End If

SetRowColor fg
fg.FixedRows = 1
fg.row = 1
fg.Col = 0

'b:
Exit Function

'ShowDataEH:
'    MsgBox err & vbCrLf & Error$
'    fg.Visible = False
'    Resume b

End Function


2.更高效的方法获取是这样的,是今天在项目中必要要解决速度问题才弄出来的,而且即简单又快捷

Dim rsConstitute As ADODB.Recordset

txtsql = "select SSFXDM,KCWPDM,XTDWDM,SSZJYL from tabv "
Set rsConstitute = Query(txtsql, msgtext)

Set FGridCheck.DataSource = rsConstitute


3.针对MSHFlexGrid的一系列通用方法:

Public Function fgclear(fg As MSHFlexGrid)
'20060728
fg.Clear
fg.rows = 2
fg.Cols = 2
fg.FixedRows = 1
fg.FixedCols = 1
fg.colwidth(0) = 1000
fg.colwidth(1) = 1000
fg.row = 0
fg.Col = 0
End Function

' 设置MSHFlexGrid每列的颜色
Public Function SetColColor(fg As MSHFlexGrid)
'20060728
Dim i
fg.FillStyle = 1
For i = 2 To fg.Cols - 1
fg.Col = i
If i Mod 2 <> 0 Then
fg.row = 0
fg.RowSel = fg.rows - 1
fg.CellBackColor = &HC0FFFF
End If
Next i

fg.FillStyle = 0
fg.row = 0
fg.Col = 0

End Function

' 设置MSHFlexGrid每列的颜色
Public Function colw(fg As MSHFlexGrid) As String
'20060728
Dim i
Dim S
S = ""
For i = 0 To fg.Cols - 1
S = S & "fg.ColWidth(" & i & ")=" & fg.colwidth(i) & " '" & fg.TextMatrix(0, i) & "   " & Chr(13) & Chr(10)
Next i
colw = S

End Function


Public Sub markfg1(ByRef fg As MSHFlexGrid, lb As Label, countlb As Label, delbutton As CommandButton)
Dim r, c
Dim markdgcount As Integer
r = fg.row
c = fg.Col

If r <> 0 Then
If InStr(fg.TextMatrix(r, 0), "√") = 0 Then
fg.TextMatrix(r, 0) = "√ " & fg.TextMatrix(r, 0)
fg.Col = 0
fg.CellAlignment = 7

For i = 0 To fg.Cols - 1
fg.Col = i
fg.CellBackColor = &HFF&  '红色      '蓝色&H8000000D
Next

If countlb.Caption = "" Then
markdgcount = 1
Else
markdgcount = CInt(countlb.Caption) + 1
End If
Else
fg.TextMatrix(r, 0) = Right(fg.TextMatrix(r, 0), Len(fg.TextMatrix(r, 0)) - 2)
If Trim(fg.TextMatrix(fg.row, 15)) = "N" Then
If r Mod 2 = 0 Then
For i = 0 To fg.Cols - 1
fg.Col = i
fg.CellBackColor = &HE0E0E0
Next
Else
For i = 0 To fg.Cols - 1
fg.Col = i
fg.CellBackColor = &HFFFFFF
Next
End If
Else
For i = 0 To fg.Cols - 1
fg.Col = i
fg.CellBackColor = &H80FF80
Next
End If
If countlb.Caption = "" Then
markdgcount = 0
Else
markdgcount = CInt(countlb.Caption) - 1
End If
End If
If markdgcount <> 0 Then
countlb.Caption = markdgcount
lb.Caption = "已选择了 " & CStr(countlb.Caption) & " 条记录!"
delbutton.Enabled = True
Else
countlb.Caption = ""
lb.Caption = ""
delbutton.Enabled = False
End If
End If
End Sub


作者:王春天 2013.11.14 地址:/article/5324730.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐