关于GoldPrinter(金质打印通),设置网格头(脚)的简化

来源:互联网 发布:js的兼容性问题 编辑:程序博客网 时间:2024/05/01 11:52

首先,感谢"长江支流"的为我们提供的GoldPrinter(金质打印通)打印源码!

在使用GoldPrinter(金质打印通)时,设置网格头,需要定义数组,很麻烦,遂写了下面的代码简化之。在引用时这样只需要把下面函数添加进你的程序就可以了,调用方法如下,支持多行多列。

  ''*****网格头说明(可选)*****
        misGoldPrinter.Header = SetGridHeader("aa,aa,aa|bb,bb,bb")        '将定制对象,赋给页头

    '-----------------
    '设置表格上的标题,可以是多行
    '------------------------
    Private Shared Function SetGridHeader(ByVal HeaderStr As ObjectAs GoldPrinter.Header
        
'分行用“|”,分割用"," 例如:“a,b,c|d,e,f”
        '行列数基本不受限制,但超过一页失去意义,因为以Body为主,以其它为辅
        '实际上可以设置header.DataSource
        'DataSource可以是字符串、一维数组、二维数组、DataTable、WinDataGrid、WebDataGrid、ListView
        'MSHFlexGrid、HtmlTable等等二维形式

        
If TypeName(HeaderStr) = "String" Then
            
If HeaderStr = "" Then
                
Return Nothing
            
End If
            
Dim i, j As Int16
            
Dim RowNum, ColNum, StartChar, EndChar As Int16
            
Dim js As Boolean = True
            
For i = 0 To HeaderStr.Length - 1
                
If HeaderStr.Chars(i) = "|" Then
                    RowNum 
+= 1
                    js 
= False '遇到分行就不要计列数了
                End If
                
If Not js AndAlso HeaderStr.Chars(i) = "," Then
                    ColNum 
+= 1
                
End If
            
Next
            
If RowNum > 0 Then
                
Dim header As New GoldPrinter.Header(RowNum + 1, ColNum + 1)
                header.IsDrawAllPage 
= True         '可以指定每页是否重复打印
                StartChar = 0
                EndChar 
= HeaderStr.Length
                
For i = 0 To RowNum
                    
For j = 0 To ColNum
                        
If j = ColNum Then
                            
If i < RowNum Then
                                EndChar 
= HeaderStr.IndexOf("|", StartChar)
                            
Else
                                EndChar 
= HeaderStr.Length
                            
End If

                        
Else
                            EndChar 
= HeaderStr.IndexOf(",", StartChar + 1)
                        
End If
                        header.SetText(i, j, HeaderStr.Substring(StartChar, EndChar 
- StartChar))
                        StartChar 
= EndChar + 1

                    
Next
                
Next
                
Return header
            
Else
                
Dim header As New GoldPrinter.Header
                header.DataSource 
= HeaderStr
                
Return header
            
End If

        
Else
            
Dim header As New GoldPrinter.Header
            header.DataSource 
= HeaderStr
            
Return header
        
End If



    
End Function
 
原创粉丝点击