今天无意间浏览网页看这个帖子,不知有没有大神可以将其转化为全局代码供table使用
在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(255, 255, 192)
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 - 1, 0) = "合计"
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

#Region "クラス変数"
Shared BACKCOLOR As Brush = Brushes.Beige
#End Region

#Region " FlexFreezeTop "
' Panelクラスを継承し、FlexGridを使用したクラスです。
' パネルに含まれるグリッド(子グリッド)は、固定行が見えないように位置されます。
' また、最下部「n」列が見えるように、子グリッドもサイズ調整され、スクロールされます。
'
' 子グリッドは、親FlexGridに結び付けられます。
' したがって、根本的なグリッドモデル(データ、レイアウト、スタイル、選択など)を共有します。
'
' 全体のコントロール(パネルおよびパネル内のグリッド)は
' 親のFlexGridに関連付けられ、その最上部に位置します。
'
' このように、そのコントロールは、常に親グリッドの最上部「n」列を示します。
Public Class FlexFreezeTop
Inherits Panel

#Region " Fields "

Dim WithEvents _frz As C1.Win.C1FlexGrid.C1FlexGrid
Dim WithEvents _main As C1.Win.C1FlexGrid.C1FlexGrid
Dim _rows As Int32

#End Region

#Region " Constructors "

Public Sub New(ByVal main As C1.Win.C1FlexGrid.C1FlexGrid, ByVal rows As Int32)
MyBase.New()

_main = main
_rows = rows

' 最上部に静止行を持つ、子グリッドを生成します。
_frz = New C1.Win.C1FlexGrid.C1FlexGrid
_frz.ScrollBars = ScrollBars.None
_frz.BorderStyle = C1.Win.C1FlexGrid.Util.BaseControls.BorderStyleEnum.None
_frz.DrawMode = DrawModeEnum.OwnerDraw
_frz.KeyActionEnter = KeyActionEnum.None
Controls.Add(_frz)

' 子グリッドと親グリッドを接続します。(データやレイアウト、選択状態を共有)
_frz.DataSource = main

' 親グリッドに追加します。
main.Controls.Add(Me)

' 初期化
AdjustLayout()
End Sub

#End Region

#Region " Friend Methods "

Friend Sub AdjustLayout()
' 最上部に表示する静止行のインデックスを取得します。
Dim rows As RowCollection = _main.Rows
Dim r2 As Int32 = rows.Count - 1
Dim r1 As Int32 = rows.Fixed + _rows - 1
If r2 <= r1 Then Return

' コントロールのサイズや位置を設定します。
Dim rc As Rectangle = _main.ClientRectangle
Dim hei As Int32 = rows(r1).Bottom - rows(rows.Fixed).Top
rc.Y = rows(rows.Fixed).Top
rc.Height = hei
Bounds = rc

' 固定行を隠すために、子グリッドを調節します。
rc = ClientRectangle
hei = rows(rows.Fixed + rows.Frozen).Top
rc.Y -= hei
rc.Height += hei
_frz.Bounds = rc

' スクロール位置を同期させます。
SynchScrollPosition(False)
End Sub

Friend Sub SynchScrollPosition(ByVal synchMain As Boolean)
Dim pos As Point

' 親グリッド上のXスクロール位置を同期させます。
If synchMain Then
pos = _frz.ScrollPosition
pos.Y = _main.ScrollPosition.Y
_main.ScrollPosition = pos
End If

' 親グリッドの静止行の位置をXスクロール位置をに同期させます。
pos = _main.ScrollPosition
pos.Y = 0
_frz.ScrollPosition = pos

' すぐにすべてを更新します。
_main.Update()
_frz.Update()
End Sub

#End Region

Events

End Class
#End Region

FlexFreezeBottom

FlexFreezeLeft

FlexFreezeRight

End Class

效果如下:

在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行。