以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  初始数的科目汇总  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=166144)

--  作者:采菊东篱下
--  发布时间:2021/5/20 15:26:00
--  初始数的科目汇总

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

  初始数是手工输入的,要求逐级汇总科目初始金额,科目代码由逐级添加4位数区别科目级数,最后添加一行合并科目代码列与科目名称列单元格,在初始余额列汇总所有一级科目初始余额,我这样写,红色标注代码报错:
代码发不上来,只能用wps上传。
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:科目汇总代码.rar



[此贴子已经被作者于2021/5/20 15:30:59编辑过]

--  作者:有点蓝
--  发布时间:2021/5/20 15:37:00
--  
代码放在什么事件里的?


不同事件有不同的e参数,不要随便用

--  作者:采菊东篱下
--  发布时间:2021/5/20 16:52:00
--  
Tables("初始数据_Table1")的AfterLoad事件写入下面的代码,在窗口的Table1中加载资产表:
Tables("初始数据_Table1").Fill("Select * Fro m {资产}",False)
With Tables("初始数据_Table1")
    .SetColVisibleWidth("科目代码|110|科目名称|130|借或贷|50|初始数量|70|初始余额|70")
End With

在Tables("初始数据_Table1")的DataColChanged事件写入下面的代码能保存,但并没添加行:
With DataTables("初始数据_Table1")
    Dim km As String = e.DataRow("科目代码")
    For i1 As Integer = (km.Length / 4) - 1 To 1
        Dim c1 As Integer = 4 * i1
        Dim dr1 As DataRow = .find("[科目代码] Like \'" & e.DataRow("科目代码").SubString(0,c1) & "%\' And [科目代码] <> \'" & e.DataRow("科目代码").SubString(0,c1) & "%\'")
        If (e.DataCol.Name = "科目代码" OrElse e.DataCol.Name = "科目名称") AndAlso "[科目代码] Like \'" & e.DataRow("科目代码").SubString(0,c1) & "%\' And [科目代码] <> \'" & e.DataRow("科目代码").SubString(0,c1) & "%\'" Then
            e.Cancel = True \'取消编辑
        Else
            dr1("借或贷") = "借"
            dr1("初始余额") = .Compute("Sum(初始余额)", "[科目代码] Like \'" & e.DataRow("科目代码").SubString(0,c1) & "%\' And [科目代码] <> \'" & e.DataRow("科目代码").SubString(0,c1) & "%\'")
        End If
    Next
    Dim rt1 As DataRow = .AddNew()
    rt1("科目代码") = "资产总计"
    rt1("借或贷") = "借"
    rt1("初始余额") = .Compute("Sum(初始余额)", "[科目代码] = \'" & e.DataRow("科目代码").SubString(0,4) & "%\'")
    .DataCols("初始数量").SetFormat("#,###.##")
    .DataCols("初始余额").SetFormat("#,###.##")
End With

Tables("初始数据_Table1")的DrawCell事件中写入下面代码报错:
Dim zc As WinForm.Table = e.Form.Controls("Table1")
Dim tb1 As Table = zc.Table
tb1.Grid.AllowMerging = C1.Win.C1FlexGrid.AllowMergingEnum.Custom
Dim rng As C1.Win.C1FlexGrid.CellRange = tb1.Grid.GetCellRange(tb1.Row.count -1, 0, tb1.Row.count -1, 1)
tb1.Grid.MergedRanges.Add(rng)
[此贴子已经被作者于2021/5/20 16:53:19编辑过]

--  作者:有点蓝
--  发布时间:2021/5/20 17:15:00
--  
第1、3段代码可以放到窗口afterload事件,但是不能放到表事件处理。

第2段代码感觉就是,找来几条衣服,剪碎,随便找些碎片用胶布粘成一件新的衣服。就是随便找来一些代码堆到一起,至于可以干什么,看不懂

--  作者:采菊东篱下
--  发布时间:2021/5/20 17:25:00
--  

图片点击可在新窗口打开查看此主题相关图片如下:qq图片20210520172053.png
图片点击可在新窗口打开查看
这段代码写在AfterLoad事件中报错
Dim zc As WinForm.Table = e.Form.Controls("Table1")
Dim tb1 As Table = zc.Table
tb1.Grid.AllowMerging = C1.Win.C1FlexGrid.AllowMergingEnum.Custom
Dim rng As C1.Win.C1FlexGrid.CellRange = tb1.Grid.GetCellRange(tb1.Row.count -1, 0, tb1.Row.count -1, 1)
tb1.Grid.MergedRanges.Add(rng)


--  作者:有点蓝
--  发布时间:2021/5/20 17:29:00
--  
http://www.foxtable.com/webhelp/topics/1438.htm
--  作者:采菊东篱下
--  发布时间:2021/5/20 17:35:00
--  
在Tables("初始数据_Table1")的DataColChanged事件写入下面的代码能保存,但并没添加行:
With DataTables("初始数据_Table1") \'逐级统计初始余额 
    Dim km As String = e.DataRow("科目代码")
    For i1 As Integer = (km.Length / 4) - 1 To 1
        Dim c1 As Integer = 4 * i1
        Dim dr1 As DataRow = .find("[科目代码] Like \'" & e.DataRow("科目代码").SubString(0,c1) & "%\' And [科目代码] <> \'" & e.DataRow("科目代码").SubString(0,c1) & "%\'")
        If (e.DataCol.Name = "科目代码" OrElse e.DataCol.Name = "科目名称") AndAlso "[科目代码] Like \'" & e.DataRow("科目代码").SubString(0,c1) & "%\' And [科目代码] <> \'" & e.DataRow("科目代码").SubString(0,c1) & "%\'" Then
            e.Cancel = True \'取消编辑
        Else
            dr1("借或贷") = "借"
            dr1("初始余额") = .Compute("Sum(初始余额)", "[科目代码] Like \'" & e.DataRow("科目代码").SubString(0,c1) & "%\' And [科目代码] <> \'" & e.DataRow("科目代码").SubString(0,c1) & "%\'")
        End If
    Next
    Dim rt1 As DataRow = .AddNew() \'添加一行用来统计一级科目余额,它是汇总行,故科目代码这行的单元格自动显示为资产总计,因为用统计方式写这行,初始数据不能手工输入,且数据不是直接统计,而是只统计一级科目,所以不能用统计模式,只能手工编写代码。
    rt1("科目代码") = "资产总计"
    rt1("借或贷") = "借"
    rt1("初始余额") = .Compute("Sum(初始余额)", "[科目代码] = \'" & e.DataRow("科目代码").SubString(0,4) & "%\'") \'统计一级科目余额
    .DataCols("初始数量").SetFormat("#,###.##") \'千位分隔符,保留2位小数
    .DataCols("初始余额").SetFormat("#,###.##")
End With

--  作者:采菊东篱下
--  发布时间:2021/5/20 17:50:00
--  
这段代码写在AfterLoad事件中报错
Dim zc As WinForm.Table = e.Form.Controls("Table1")
Dim tb1 As Table = zc.Table
tb1.Grid.AllowMerging = C1.Win.C1FlexGrid.AllowMergingEnum.Custom
Dim rng As C1.Win.C1FlexGrid.CellRange = tb1.Grid.GetCellRange(tb1.Row.count -1, 0, tb1.Row.count -1, 1)
tb1.Grid.MergedRanges.Add(rng)
这段代码是合并Tables("初始数据_Table1")新添一行的科目代码、科目名称列的单元格的,Grid只对Table有效,错在哪我无从入手,合并单元格的内容我了一天帮助了,不想做到表的打印设显示中,效果直接在table中显示,我看了好久了,不知怎么实现。

--  作者:采菊东篱下
--  发布时间:2021/5/20 17:50:00
--  
你给我看的连接不明什么作用。
--  作者:采菊东篱下
--  发布时间:2021/5/20 18:23:00
--  
Dim zc As WinForm.Table = e.Form.Controls("Table1")
Dim tb1 As Table = zc.Table
tb1.Grid.AllowMerging = C1.Win.C1FlexGrid.AllowMergingEnum.Custom
Dim rng As C1.Win.C1FlexGrid.CellRange = tb1.Grid.GetCellRange(tb1.Rows.count -1, 0, tb1.Rows.count -1, 1)
tb1.Grid.MergedRanges.Add(rng)
这段代码不报错了。