以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [求助]固定合计行抄作业出错  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=110420)

--  作者:Fox86
--  发布时间:2017/12/2 16:08:00
--  [求助]固定合计行抄作业出错

参考大师们固定合计行的例子,没有消化吸收,做了个小项目始终不对。

1、合计行第一列不显示“合计”字样

2、筛选树的合计行第一列也不显示“合计”

3、逻辑列在合计行也显示出来了,不需要的

4、最后的列宽不对,表里设置有不显示的列

 

请老师指导。

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:合计行.foxdb

[此贴子已经被作者于2017/12/2 16:22:59编辑过]

--  作者:有点蓝
--  发布时间:2017/12/2 16:47:00
--  
项目已经加锁,无法运行
--  作者:Fox86
--  发布时间:2017/12/2 17:02:00
--  
以下是引用有点蓝在2017/12/2 16:47:00的发言:
项目已经加锁,无法运行

有点蓝老师,我重新上传

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:合计行.foxdb


--  作者:有点蓝
--  发布时间:2017/12/2 17:51:00
--  
去掉这句代码

hui.Cols(i).Style = sender.Cols(i).Style    \'同步列样式

--  作者:Fox86
--  发布时间:2017/12/2 18:11:00
--  
“合计”可以显示了,有点蓝老师。还有一个问题,合计行最后的列宽不对(灰色部分)。
图片点击可在新窗口打开查看此主题相关图片如下:666.png
图片点击可在新窗口打开查看
[此贴子已经被作者于2017/12/2 19:05:26编辑过]

--  作者:Fox86
--  发布时间:2017/12/2 18:17:00
--  

有点蓝老师,如果第一列隐藏的话,固定行“合计”也会隐藏,有什么办法让“合计”总是显示在可见的第一列。

[此贴子已经被作者于2017/12/2 18:33:42编辑过]

--  作者:Fox86
--  发布时间:2017/12/3 13:02:00
--  

顶一下,要沉了


--  作者:有点甜
--  发布时间:2017/12/3 22:13:00
--  
Dim sender As object = Args(0)
Dim ea 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
        With hui         \'调整位置
            .left = 0
            If sender.Rows(sender.Rows.count -1).Top < sender.Height - sender.rows(sender.rows.count -1).Height * 2 Then
                .Top = sender.Rows(sender.Rows.count -1).Top  \'sender.GetCellRect(sender.Rows.count-1, 1).y
            Else
                .top = gh - hg - 1
            End If
            .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   \'同步水平滚动
        For i = 1 To sender.Cols.count-1
            If hui.Cols(i).visible Then
                hui(1,i) = "合计"
                Exit For
            End If
        Next

        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

--  作者:Fox86
--  发布时间:2017/12/4 8:21:00
--  

非常感谢有点甜老师。隐藏列的问题解决了,列宽的问题还在,如下图,是不是因为我最后一列使用了自适应列宽的原因,该怎么修改代码适应列宽呢?


图片点击可在新窗口打开查看此主题相关图片如下:666.png
图片点击可在新窗口打开查看

--  作者:Fox86
--  发布时间:2017/12/4 8:24:00
--  

还有,合计行对TreeView有时起作用,有时不起作用。

 


图片点击可在新窗口打开查看此主题相关图片如下:777.png
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:999.png
图片点击可在新窗口打开查看