请问, ComponentOne 的true dbgrid控件如何实现标题的分割!
如: |   上月结存  |
     | 数量 | 金额| 望各高手指点,谢谢!

解决方案 »

  1.   

    true dbgrid控件不是太好实现啊,呵呵设计表时字段名形式  上月结存.数量 和 上月结存.金额建一个类 clsGridGroup,代码入下
    Option ExplicitPublic Sub GridGroup(ByRef rs As Recordset, ByRef TDBGrid1 As TDBGrid)
        On Error GoTo ERRH
        
        Dim FieldCount As Integer
        
        Dim i As Integer, k As Integer
        
        Dim SplitIdx As Integer
        
        Dim Slt As Split
        
        Dim pos As Integer
        
        Dim strHead() As String     '--如果列标题由两部分组成,则将其分离并存入数组
        
        TDBGrid1.ClearFields        '--清除Grid布局
        TDBGrid1.AllowUpdate = False    '--不允许修改
        
        If Not (TDBGrid1.DataSource Is rs) Then Set TDBGrid1.DataSource = rs
        
        TDBGrid1.Splits(0).Caption = "    "     '--设置Split空白标题
        
        TDBGrid1.Splits(0).DividerStyle = dbgDarkGrayLine
        TDBGrid1.Splits(0).MarqueeStyle = dbgHighlightRow
        TDBGrid1.Splits(0).ScrollBars = 0       '--0-没有,1-水平滚动条,2-垂直,3-水平垂直,4-自动
        TDBGrid1.Splits(0).ExtendRightColumn = True    '--使最右面列紧贴右面
        
        Call InvisibleColumns(TDBGrid1.Splits(0), rs.Fields.Count)
       
        Do While i < rs.Fields.Count
            pos = InStr(rs.Fields(i).Name, ".")         '--查找 "." 的位置
           
            If pos <> 0 Then
                
                strHead = Split(rs.Fields.Item(i).Name, ".")
                
                If TDBGrid1.Splits(SplitIdx).Caption <> strHead(0) Then
                
                    SplitIdx = SplitIdx + 1
                    
                    Set Slt = TDBGrid1.Splits.Add(SplitIdx)
                    
                    '----设置Split属性
                    Call SetPropertyOfSplit(Slt)
                        
                    '----初始化时,使所有列都不可见
                    Call InvisibleColumns(Slt, rs.Fields.Count)
                   
                End If
                
                Slt.Caption = strHead(0)
                Slt.Columns(i).Caption = strHead(1)
                
            ElseIf SplitIdx <> 0 And Len(Trim(TDBGrid1.Splits(SplitIdx).Caption)) <> 0 Then            SplitIdx = SplitIdx + 1
                
                Set Slt = TDBGrid1.Splits.Add(SplitIdx)
                
                '----设置Split属性
                Call SetPropertyOfSplit(Slt)
                    
                '----初始化时,使所有列都不可见
                Call InvisibleColumns(Slt, rs.Fields.Count)            Slt.Caption = "   "     '--设置Split空白标题
                
            End If
           
            TDBGrid1.Splits(SplitIdx).Columns(i).Visible = True
            TDBGrid1.Splits(SplitIdx).Columns(i).HeadAlignment = 2     '--居中
            
            i = i + 1
            
        Loop
        TDBGrid1.Splits(SplitIdx).ScrollBars = 2    '--垂直滚动条
        
        Exit Sub
        
    ERRH:    MsgBox Err.Description
        
    End Sub'----初始化时,使所有列都不可见
    Private Sub InvisibleColumns(ByRef Slt As Split, ColCount As Integer)
        Dim k As Integer
        For k = 0 To ColCount - 1
            Slt.Columns(k).Visible = False
        Next
    End Sub'----设置Split属性
    Private Sub SetPropertyOfSplit(ByRef Slt As Split)
        Slt.RecordSelectors = False
        Slt.DividerStyle = dbgDarkGrayLine
        Slt.MarqueeStyle = dbgHighlightRow
        Slt.ScrollBars = 0                   '--0-没有,1-水平滚动条,2-垂直,3-水平垂直,4-自动
        Slt.ExtendRightColumn = True
    End Sub