Foxtable(狐表)用户栏目专家坐堂 → 我建立了一个临时列来计算数据付给一个列但是,总是提示列已经建立,我加了判断,为何没用呀,顺便问问,我不用临时列我可以有方法直接计算数据吗?比如我分析得到字符串"0.8*0.8*9"有方法可以直接计算吗


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

主题:我建立了一个临时列来计算数据付给一个列但是,总是提示列已经建立,我加了判断,为何没用呀,顺便问问,我不用临时列我可以有方法直接计算数据吗?比如我分析得到字符串"0.8*0.8*9"有方法可以直接计算吗

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


加好友 发短信
等级:二尾狐 帖子:594 积分:4030 威望:0 精华:0 注册:2015/3/10 13:25:00
我建立了一个临时列来计算数据付给一个列但是,总是提示列已经建立,我加了判断,为何没用呀,顺便问问,我不用临时列我可以有方法直接计算数据吗?比如我分析得到字符串"0.8*0.8*9"有方法可以直接计算吗  发帖心情 Post By:2015/3/18 14:56:00 [只看该作者]

我建立了一个临时列来计算数据付给一个列但是,总是提示列已经建立,我加了判断,为何没用呀,顺便问问,我不用临时列我可以有方法直接计算数据吗?比如我分析得到字符串"0.8*0.8*9"有方法可以直接计算吗

这段代码在对应表的dataColchanged里面

Dim b As List(Of DataRow) = DataTables("表达式列表").Select("表名 ='" + e.DataTable.Name+"'"  )
Dim tarb As DataTable = e.DataTable

'表达式分析
Dim temp,temp_s,temp_ss As String
Dim str As String
Dim s,en As Integer
Dim lz() As String '分析表达式后存放列名称数组
Dim s_ls As String = "临时计算列"
Dim temp_col As DataCol = Nothing  '临时计算列

For Each br As DataRow In b

    If IsNothing (temp_col)
       ' MessageBox.Show("1")
        temp_col = e.DataTable.DataCols.Add(s_ls, Gettype(Double) )  '建立临时计算列
    End If

    temp_col.Expression =  br("表达式")  '设置计算列
    For Each r As DataRow In tarb.DataRows
        r(br("列名")) = r(s_ls)
    Next
Next

[此贴子已经被作者于2015/3/18 15:02:17编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2015/3/18 14:59:00 [只看该作者]

呃。

 

For Each br As DataRow In b
    For Each r As DataRow In tarb.DataRows
        r(br("列名")) = Eval(br("表达式"))
    Next
Next

http://www.foxtable.com/help/topics/1277.htm

 


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2015/3/18 15:02:00 [只看该作者]

For Each br As DataRow In b
    If DataTables("表A").DataCols.Contains(s_ls) Then
        DataTables("表A").DataCols.Remove(s_ls)
    End If
    e.DataTable.DataCols.Add(s_ls, Gettype(Double), br("表达式")  )  '建立临时计算列
    For Each r As DataRow In tarb.DataRows
        r(br("列名")) = r(s_ls)
    Next
    DataTables("表A").DataCols.Remove(s_ls)
Next

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


加好友 发短信
等级:二尾狐 帖子:594 积分:4030 威望:0 精华:0 注册:2015/3/10 13:25:00
  发帖心情 Post By:2015/3/18 15:20:00 [只看该作者]

For Each br As DataRow In b
    If tarb.DataCols.Contains(s_ls) Then
        tarb.DataCols.Delete(s_ls)
    End If

    temp_col = e.DataTable.DataCols.Add(s_ls, Gettype(Double),br("表达式")   )  '建立临时计算列
    For Each r As DataRow In tarb.DataRows
        r(br("列名")) = r(s_ls)
    Next  
Next

 

用临时列计算这样就可以了


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


加好友 发短信
等级:二尾狐 帖子:594 积分:4030 威望:0 精华:0 注册:2015/3/10 13:25:00
  发帖心情 Post By:2015/3/18 15:27:00 [只看该作者]

这个也可以

不过感觉

For Each br As DataRow In b
    For Each r As DataRow In tarb.DataRows
        r(br("列名")) = Eval(br("表达式"))
    Next
Next
更简单呢

谢谢 你了


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


加好友 发短信
等级:二尾狐 帖子:594 积分:4030 威望:0 精华:0 注册:2015/3/10 13:25:00
  发帖心情 Post By:2015/3/18 16:10:00 [只看该作者]

用eval 根本不刷新界面 还是这个好

 回到顶部