以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  垂直转换水平表百分比设置问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=99869)

--  作者:douglas738888
--  发布时间:2017/4/28 11:21:00
--  垂直转换水平表百分比设置问题

请教老师,以下代码怎样设置增加列的百分比,和表头某列的百分比

 

Dim dtb As New DataTableBuilder("表D")
dtb.AddDef("目标产值",Gettype(String),10)
dtb.AddDef("奖金提取比例",Gettype(String),10)
dtb.AddDef("总奖金",Gettype(String),10)
For Each v As String In DataTables("表B").GetValues("净利润率")   这个部分怎样生成0.00%,现在显示的是0.03  0.04   0.05....
    dtb.AddDef(v, Gettype(Double))
Next
dtb.Build()
For Each v As String() In DataTables("表B").GetValues("目标产值|奖金提取比例|总奖金")
    Dim dr1 As DataRow = DataTables("表D").AddNew()
    dr1("目标产值") = v(0)
    dr1("奖金提取比例") = v(1)
    dr1("总奖金") = v(2)
    For Each dr2 As DataRow In DataTables ("表B").Select("目标产值 = \'" & v(0) & "\' And 奖金提取比例 = \'" & v(1) & "\'  And 总奖金 = \'" & v(2) & "\'")
        dr1(dr2("净利润率")) = dr2("奖金额")
    Next
Next
Tables("总因子_Table1").DataSource = DataTables("表D")
DataTables("总因子_Table1").DataCols("奖金提取比例").SetFormat("0.00%")    这个部分是增加列,这个代码无法生成0.00%,现在显示的是0.15


--  作者:有点色
--  发布时间:2017/4/28 11:49:00
--  
Dim dtb As New DataTableBuilder("表D")
dtb.AddDef("目标产值",Gettype(String),10)
dtb.AddDef("奖金提取比例",Gettype(Double))
dtb.AddDef("总奖金",Gettype(String),10)
For Each v As String In DataTables("表B").GetValues("净利润率")
    dtb.AddDef(v, Gettype(Double), "", Format(v, "0.00%"))
Next
dtb.Build()
For Each v As String() In DataTables("表B").GetValues("目标产值|奖金提取比例|总奖金")
    Dim dr1 As DataRow = DataTables("表D").AddNew()
    dr1("目标产值") = v(0)
    dr1("奖金提取比例") = v(1)
    dr1("总奖金") = v(2)
    For Each dr2 As DataRow In DataTables ("表B").Select("目标产值 = \'" & v(0) & "\' And 奖金提取比例 = \'" & v(1) & "\'  And 总奖金 = \'" & v(2) & "\'")
        dr1(dr2("净利润率")) = dr2("奖金额")
    Next
Next
Tables("总因子_Table1").DataSource = DataTables("表D")
DataTables("总因子_Table1").DataCols("奖金提取比例").SetFormat("0.00%")    这个部分是增加列,这个代码无法生成0.00%,现在显示的是0.15

--  作者:douglas738888
--  发布时间:2017/4/28 12:13:00
--  

感谢老师,第一个问题,我忽略把DOUBLE写成了STRING,自然不能转换为0.00%,

              第二额问题,

             For Each v As String In DataTables("表B").GetValues("净利润率")
                 dtb.AddDef(v, Gettype(Double), "", Format(v, "0.00%"))
             Next

             原来净利润率的列是DOUBLE属性,现在转换过来是标题,您指导的代码转换后标题全部显示0.00%,不会GETVALUES得到量,比如3.00% 4.00%

             我把 For Each v As String 改成 For Each v As DOUBLE报错

采用以下方法可生成,但是不是随V的动态,也有问题

With DataTables("表D")
    .DataCols("0.03").Caption = "3%"
    .DataCols("0.04").Caption = "4%"
    .BuildHeader()
End With

[此贴子已经被作者于2017/4/28 12:23:24编辑过]

--  作者:有点色
--  发布时间:2017/4/28 12:14:00
--  

哦,改成

 

dtb.AddDef(v, Gettype(Double), "", Format(val(v), "0.00%"))


--  作者:douglas738888
--  发布时间:2017/4/28 12:26:00
--  

感谢老师,应该就是帮助中的

最常见的转换应该是将字符转换为数字,对于这种转换,有更直接的方法。
Visual Basic提供了一个Val函数,用于将字符转换为数值,即使转换失败,也不会报错,而是返回0。

例如:

Dim s1 As String = "abc"
Dim
s2 As String = "123.12"
Output.Show(Val(s1) +
100) \'等于100
Output.Show(Val(s2) +
100)
\'等于223.12