以文本方式查看主题

-  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=76476)

--  作者:hbhb
--  发布时间:2015/10/29 22:29:00
--  请教代码
大师:drawcell事件中如下代码,错在哪里?为何差异行不计算?
Dim r As Row   \'---项目行---
If e.Table.DataTable.Name.Contains("附注表")  Then
    If Vars("fzToTal").count > 0 Then
        Dim sum(Vars("fzToTal").count - 1) As object   \'---合计数组
        Dim sum1(Vars("fzToTal").count - 1) As object   \'----报表数组
        Dim sum2(Vars("fzToTal").count - 1) As object   \'----差异数组
        e.Table.DataTable.AddUserStyle("abc",Color.LightBLue,Color.blue)
        If e.Row(e.Table.Cols(0).name) = "合计" Then           
            e.Style = "abc"           
            For n As Integer = 0 To e.Row.Index -1
                r = e.Table.Rows(n)
                If r(e.Table.Cols(0).name) <> "合计" Then
                    For i As Integer = 1 To sum.length - 1
                        sum(i) += val(r(Vars("fzToTal")(i)))
                    Next
                End If
            Next
            For i As Integer = 1 To sum.length - 1
                e.Row(Vars("fzToTal")(i)) = Format(val(sum(i)),"n")
            Next
            
        End If
        If e.Row(e.Table.Cols(0).name) = "报表数" Then
            For i As Integer = 1 To sum1.length - 1
                sum1(i) = val(e.Row(Vars("fzToTal")(i)))
            Next
        End If
        
        If e.Row(e.Table.Cols(0).name) = "差异" Then
            For i As Integer = 1 To sum2.length - 1
 
                e.Row(Vars("fzToTal")(i)) = Format(val(sum1(i)),"n") - Format(val(sum(i)),"n")
            Next
        End If
              
    End If
End If

--  作者:大红袍
--  发布时间:2015/10/29 22:35:00
--  
e.Row(Vars("fzToTal")(i)) = Format(val(sum1(i)) - val(sum(i)),"n")
--  作者:hbhb
--  发布时间:2015/10/29 22:45:00
--  
还是不计算,为何?
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目29.zip


--  作者:大红袍
--  发布时间:2015/10/29 23:04:00
--  

Dim r As Row   \'---项目行---
Vars("fzToTal") = new List(Of String)
Vars("fzToTal").add("数量")
Vars("fzToTal").add("金额")
If e.Table.DataTable.Name.Contains("统计")  Then
    If Vars("fzToTal").count > 0 Then
        Dim sum(Vars("fzToTal").count - 1) As object   \'---合计数组
        Dim sum1(Vars("fzToTal").count - 1) As object   \'----报表数组
        Dim sum2(Vars("fzToTal").count - 1) As object   \'----差异数组
        e.Table.DataTable.AddUserStyle("abc",Color.LightBLue,Color.blue)
        If e.Row(e.Table.Cols(0).name) = "合计" Then
            e.Style = "abc"
            For n As Integer = 0 To e.Row.Index -1
                r = e.Table.Rows(n)
                If r(e.Table.Cols(0).name) <> "合计" Then
                    For i As Integer = 0 To sum.length - 1
                        sum(i) += val(r(Vars("fzToTal")(i)))
                    Next
                End If
            Next
            For i As Integer = 0 To sum.length - 1
                e.Row(Vars("fzToTal")(i)) = val(sum(i))
            Next
        End If
       
       
        If e.Row(e.Table.Cols(0).name) = "差异数" Then
            Dim idx1 As Integer = e.Table.FindRow(e.Table.Cols(0).name & " = \'报表数\'")
            Dim idx2 As Integer = e.Table.FindRow(e.Table.Cols(0).name & " = \'合计\'")
            For i As Integer = 0 To sum2.length - 1
                e.Row(Vars("fzToTal")(i)) = val(e.Table.Rows(idx1)(Vars("fzToTal")(i))) - val(e.Table.Rows(idx2)(Vars("fzToTal")(i)))
            Next
        End If
       
    End If
End If


--  作者:hbhb
--  发布时间:2015/10/29 23:27:00
--  
始终不理解我写的代码错在哪里?通过e.row定位的index的行号与查找的行号是一样的?为何就不行?
--  作者:大红袍
--  发布时间:2015/10/30 10:12:00
--  
drawcell执行的时候,一个单元格一个单元格运行的,也就是每次进入,e.Row都是不同,不可能获取多行的数据,必须用findrow查询