我也是碰到这样的问题,把大红袍的(合计行固定.table)文件下载之后,以为只要在
表事件AfterLoadTableSetting 加入下面的代码就可以行了,结果试了半天都不行。
e.Table.Grid.Name = e.Table.Name '将底层和现有的table 用Name关联起来
然后看见5楼说输出代码,看懂里面的就可以,果然有收获,下面我自己的操作方法补充进来,让更多像我这样的小白更快学会这个操作,
我不懂接下来的操作有什么关联,反正我是用下面的步骤设置成功的(花了三个小时慢慢看输出代码,对比<合计行固定.table>里面的N多地方,看有没有不同)
首先要在全局代码器里面<Default>添加下面的代码
Public Sub Grid_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs)
Functions.Execute("MyGrid_Paint",sender,e)
End Sub
然后在 项目属性-项目事件-AfterOpenProject 添加下面的代码
AddHandler Tables("订单").grid.Paint, AddressOf Grid_Paint
接着再到内部函数添加函数,函数名称为:MyGrid_Paint
函数代码下面的 这样就OK了,可以实现固定合计行了。
Dim sender As object = Args(0)
Dim e As object = Args(1)
If sender.Name = "" Then Return Nothing '没有设置好Table 和底层的关联
If Tables.Contains(sender.Name) = False Then Return Nothing '不存在就退出
Dim tb As Table = Tables(sender.Name)
If tb.GrandTotal Then '如果处于合计模式
If sender.Rows(sender.Rows.count -1).Top < sender.Height - sender.rows(sender.rows.count -1).Height * 2 Then '如果原合计行可视
If sender.Controls.ContainsKey("Myhuizong") Then '删除合计行控件
sender.Controls.RemoveByKey("Myhuizong")
End If
Else
Dim hg As Integer = sender.rows(sender.rows.count -1).Height '控件高
If hg = -1 Then
hg = sender.rows(sender.rows.count -1).HeightDisplay
End If
Dim gh = sender.Height - 1
If sender.ScrollBarsVisible = 1 OrElse sender.ScrollBarsVisible = 3 Then '显示了水平滚动条
gh = gh - 19
End If
If sender.Controls.ContainsKey("Myhuizong") = False Then '不存在汇总控件,则添加
Dim huizong As new C1.Win.C1FlexGrid.C1FlexGrid
With huizong
.name = "Myhuizong"
.BorderStyle = C1.Win.C1FlexGrid.Util.BaseControls.BorderStyleEnum.None '无边框
.Cols.Count = sender.Cols.Count
.rows.count = 2
.Rows(0).Height = 0 '隐藏标题行
.Enabled = False '不能使用控件
End With
sender.Controls.add(huizong) '加入控件
End If
Dim hui As C1.Win.C1FlexGrid.C1FlexGrid = sender.Controls("Myhuizong")
If sender.ScrollBarsVisible = 0 OrElse sender.ScrollBarsVisible = 2 Then '显示了垂直滚动条
hui.ScrollBars = 2
Else
hui.ScrollBars = 0
End If
With hui '调整位置
.left = 0
.Top = gh - hg - 1
.width = sender.width -19
.Height = hg + 2
.Rows(1).Height = hg
End With
Dim sLightBlue As C1.Win.C1FlexGrid.CellStyle = hui.Styles.Add("LightBlue")
sLightBlue.BackColor = Drawing.Color.PaleGreen
Dim i As Integer
For i = 0 To sender.Cols.count -1
If sender.Cols(i).width = -1 Then '同步列宽
hui.Cols(i).width = sender.Cols.DefaultSize
Else
hui.Cols(i).width = sender.Cols(i).width
End If
hui.Cols(i).Style = sender.Cols(i).Style '同步列样式
If i > 0 Then hui.SetCellStyle(1,i,sLightBlue)
hui.Cols(i).Visible = sender.Cols(i).Visible '同步隐藏列
Next
hui.Cols.Frozen = sender.Cols.Frozen '同步冻结列
hui.ScrollPosition = sender.ScrollPosition '同步水平滚动
hui(1,1) = "合计"
For i = 2 To sender.Cols.count -1
If tb.Cols(i-1).GrandTotal Then
hui(1,i) = sender.Aggregate(C1.Win.C1FlexGrid.AggregateEnum.Sum,0,i,sender.Rows.count-2,i,1)
Else
hui(1,i) = Nothing
End If
Next
End If
Else '检查并删除控件
If sender.Controls.ContainsKey("Myhuizong") Then '删除控件
sender.Controls.RemoveByKey("Myhuizong")
End If
End If