Foxtable(狐表)用户栏目专家坐堂 → [求助]数值列,设置为合并模式后,再对此合并列进行合计或分组汇总,如何实现合计数中只计算一次合并列?


  共有2715人关注过本帖树形打印复制链接

主题:[求助]数值列,设置为合并模式后,再对此合并列进行合计或分组汇总,如何实现合计数中只计算一次合并列?

帅哥哟,离线,有人找我吗?
有点甜
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/11/27 9:45:00 [显示全部帖子]

修改合计行、汇总行的数据,看看

 

http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=109453&skin=0

 

 


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/11/27 9:46:00 [显示全部帖子]

1、汇总模式

 

http://www.foxtable.com/webhelp/scr/1964.htm

 

2、合计模式

 

下载信息  [文件大小:388.0 KB  下载次数:8]
图片点击可在新窗口打开查看点击浏览该文件:自定义固定合计行.table


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/11/27 12:41:00 [显示全部帖子]

1、去看【全局代码】【内部函数】的代码。

 

2、请看懂标红的代码,不会做,请上传具体实例说明你要做的。


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/11/27 14:41:00 [显示全部帖子]

 例子没问题。上传你自己的实例说明你要做什么。

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/11/27 15:34:00 [显示全部帖子]

多列情况也可以判断的,请根据你的实际情况,做个例子发上来,说明你要达到的效果。


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/11/27 17:10:00 [显示全部帖子]

参考代码

 

Dim t As Table = Tables("收保_退保对应查询表")
Dim pdr As DataRow = Nothing
For Each dr As DataRow In t.DataTable.Select("", "piao据号码, 支piao日期")
    If pdr Is Nothing OrElse pdr("piao据号码")<>dr("piao据号码") Then
        dr("余额") = dr("piao面金额") - dr("开具支piao明细金额")
    Else
        dr("余额") = pdr("余额") - dr("开具支piao明细金额")
    End If
   
    pdr = dr
Next


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/11/28 8:43:00 [显示全部帖子]

1、你根据哪几列进行合并?

 

2、你计数、累计、平均,逻辑是什么?根据什么规则计算值?


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/11/28 11:12:00 [显示全部帖子]

    Dim cname = t.cols(t.ColSel).name
    If t.AllowMerge AndAlso t.MergeCols.Contains(cname) Then
        Dim sum As Double = t.rows(t.TopRow)(cname)
        Dim count As Integer = 1
        Dim avg As Double = 0
        For i As Integer = t.TopRow+1 To t.BottomRow
            For j As Integer = 0 To t.ColSel
                If t.rows(i)(j) <> t.rows(i-1)(j) Then
                    sum += t.rows(i)(cname)
                    count += 1
                    Exit For
                End If
            Next
        Next
        StatusBar.Message3 = "计数:" & count & " 累计:" &  sum & " 平均:" & Format(sum/count, "0.00")
        Return
    End If

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/11/29 9:34:00 [显示全部帖子]

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
        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   '同步水平滚动
    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
    Dim t As Table = Tables("收保_退保对应查询表")
    Dim pdr As DataRow = Nothing
    Dim sum As Double = 0
    For Each dr As DataRow In t.DataTable.Select("", "piao据号码, 支piao日期")
        If pdr Is Nothing OrElse pdr("piao据号码")<>dr("piao据号码") Then
            sum += dr("piao面金额")
        End If
       
        pdr = dr
    Next
   
    hui.rows(1)(sender.cols("piao面金额").Index) = sum
    hui.rows(1)(sender.cols("余额").Index) = hui.Rows(1)(sender.cols("piao面金额").Index) - hui.Rows(1)(sender.cols("开具支piao明细金额").Index)
   

    'End If
Else   '检查并删除控件
    If sender.Controls.ContainsKey("Myhuizong")  Then  '删除控件
        sender.Controls.RemoveByKey("Myhuizong")
    End If
End If


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/11/29 12:27:00 [显示全部帖子]

以下是引用foxtable1在2017/11/29 12:15:00的发言:

1、好复杂又强大的自定义函数,你是指在MyGrid_Paint函数中加上绿色部分的代码吗?

2、附件项目中,关联表支piao与支piao明细,停靠位置设置为靠底部时,为什么只显示子表,父表显示不出来?(只有设置为靠右时,父表与子表显示正常)

 

1、是的

 

2、你关联表的高度设置太高了吧?调小一点即可。


 回到顶部
总数 13 1 2 下一页