C1FlexGrid合计行解决方法

在C1FlexGrid使用过程中经常用到合计行,但是C1FlexGrid的属性中却没有最下端行或者最右端列的冻结,利用FlexFreeze类可以解决这个问题,将合计行一直显示在底部。

详细请参照代码

FrozenBottom类

Imports  System.Text
Imports  C1.Win.C1FlexGrid
Imports  System.Drawing

Public   Class FrozenBottom

    
Private dt As DataTable = Nothing       ''全部DataTable

    
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        dt 
= GetData()
        
Me.C1FlexGrid1.DataSource = dt

        
Me.C1FlexGrid1.AllowResizing = C1.Win.C1FlexGrid.AllowResizingEnum.None
        C1FlexGrid1.Rows(
0).Height = 30 '
        C1FlexGrid1.Rows(C1FlexGrid1.Rows.Count - 1).AllowEditing = False

        C1FlexGrid1.Select(
-1-1)
        
''背景色
        For i As Int32 = 1 To C1FlexGrid1.Rows.Count - 2
            C1FlexGrid1.Rows(i).StyleNew.BackColor 
= Color.FromArgb(255255192)
        
Next

        
''单元格背景色
        Dim sLightBlue As CellStyle = C1FlexGrid1.Styles.Add("LightBlue")
        sLightBlue.BackColor 
= Drawing.Color.LightBlue
        
Dim sLightPink As CellStyle = C1FlexGrid1.Styles.Add("LightPink")
        sLightPink.BackColor 
= Drawing.Color.LightPink

        
For i As Int32 = 1 To C1FlexGrid1.Rows.Count - 2
            
If i Mod 2 = 1 Then
                C1FlexGrid1.SetCellStyle(i, 
2, sLightBlue)
            
Else
                C1FlexGrid1.SetCellStyle(i, 
4, sLightPink)
            
End If
            
''行号
            C1FlexGrid1(i, 0= i.ToString
        
Next

        
''列宽
        For i As Int32 = 1 To C1FlexGrid1.Cols.Count - 1
            C1FlexGrid1.Cols(i).Width 
= 100
        
Next
        
''列冻结
        C1FlexGrid1.Cols.Frozen = 1
        
''最下端一行冻结
        Dim ffb As FlexFreeze.FlexFreezeBottom = New FlexFreeze.FlexFreezeBottom(Me.C1FlexGrid1, 1)

        
''最右列冻结()
        'Dim ffc As FlexFreeze.FlexFreezeRight = New FlexFreeze.FlexFreezeRight(Me.C1FlexGrid1, 1)

        
''最下端冻结行颜色
        C1FlexGrid1.Rows(C1FlexGrid1.Rows.Count - 1).StyleNew.BackColor = Color.Red

        
''冻结行Header
        C1FlexGrid1(C1FlexGrid1.Rows.Count - 10= "合计"
    
End Sub



取得数据

    
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        
Me.Close()
    
End Sub

End Class

 FlexFreeze类(参照以前项目,注释未修改)

Imports  System
Imports  System.Drawing
Imports  System.Collections
Imports  System.ComponentModel
Imports  System.Windows.Forms
Imports  System.Data
Imports  C1.Win.C1FlexGrid

Public   Class FlexFreeze

クラス変数

FlexFreezeTop

FlexFreezeBottom

FlexFreezeLeft

FlexFreezeRight

End Class

效果如下:
C1FlexGrid合计行解决方法_第1张图片

在FlexFreeze类中分别有上下左右冻结的四个方法
        FlexFreeze.FlexFreezeLeft()
        FlexFreeze.FlexFreezeRight()
        FlexFreeze.FlexFreezeTop()
        FlexFreeze.FlexFreezeBottom()
FlexGrid自带的行列冻结分别是上和左,所以基本上用到这个类的也就是下端行冻结或者是右端列冻结
使用方法为

Dim ffb As FlexFreeze.FlexFreezeBottom = New FlexFreeze.FlexFreezeBottom(Me.C1FlexGrid1, 1)
Me.C1FlexGrid1为要冻结的FlexGrid,1 表示冻结1行。

你可能感兴趣的:(c,object,Integer,Class,button,events)