Foxtable(狐表)用户栏目专家坐堂 → 有谁能做个字段间的计算关系由用户自定义公式的例子?


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

主题:有谁能做个字段间的计算关系由用户自定义公式的例子?

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/3/31 11:22:00 [显示全部帖子]

呵呵,我昨天看到老程做过了,你可以咨询一下。
是通过Eval函数做的。

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/3/31 11:32:00 [显示全部帖子]

if then end if do loop while等等,都可以的。
你可以先看看帮助中的Eval函数说明。
[此贴子已经被作者于2009-3-31 11:32:33编辑过]

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/3/31 12:35:00 [显示全部帖子]

我刚刚改了一下Eval函数,以后可以执行简单的代码:

i = 1
If i = 1 Then
   Eval = "壹佰"
Else
   Eval = "贰佰"
End If

Eval就是要返回的值。

你可以补补VbScript的知识:
http://www.microsoft.com/china/vbscript/vbstutor/vbstutor.htm

这些内容,我不会在帮助提供的了。
[此贴子已经被作者于2009-3-31 12:36:25编辑过]

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/3/31 12:50:00 [显示全部帖子]

以下是引用cpayinyuan在2009-3-31 12:47:00的发言:

没有看明白这个例子是什么意思.


呵呵,意思是:流程语句都支持了,小小的iif有没有都无所谓了
这样可以高速地动态生成和执行函数了,而foxtable原来的动态自定义函数,是需要编译的,虽然运行速度快,但是编译很费时间,而且不够灵活。

[此贴子已经被作者于2009-3-31 12:50:40编辑过]

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/3/31 12:59:00 [显示全部帖子]

你想得多了,你在往更复杂的路上走。
首先,你这样的计算,用表达式就行了,应发工资的表达式设为:

[基本工资]+[提成]+[补助]+[奖金]+[加班费]

还能比这更简单吗?

即使用代码,也没有多复杂,将应发工资改为数据列,DatacolChanged的代码为:

Dim dr  as DataRow = e.DataRow
Select Case e.Datacol.Name 
    Case "基本工资","提成","补助","奖金","加班费"
        dr("基本工资") = dr("基本工资")  + dr("提成") + dr("补助")  + dr("奖金") + dr("加班费")
End Select


即使你有几十个计算关系,也只是不停地Case下去即可,条理清楚得很:
 
Dim dr As DataRow = e.DataRow
Select Case e.DataCol.Name
    Case "A","B"
        dr("C") = dr("A") + dr("B")
    Case "D","E"
        dr("F") = dr("D") + dr("E")
End Select
[此贴子已经被作者于2009-3-31 13:05:14编辑过]

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/3/31 14:46:00 [显示全部帖子]

就用Eval函数,目前不支持流程语句,使用很简单,没有必要提供例子了。
下次更新后,支持流程语句,再考虑提供例子。

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/3/31 15:22:00 [显示全部帖子]

以下是引用cpayinyuan在2009-3-31 15:17:00的发言:
看了程老师的事例,基本上明白了大概的思路。好像这段代码是应用在输入数据的时候。

我认为在工资软件中,最大的难度在于如何把自定义公式应用在DatacolChanged事件中,希望哪位老师再提供一下事例或者思路。
[此贴子已经被作者于2009-3-31 15:18:24编辑过]


其实也不难,在DataColChaned设置代码,判断某列的自定义公式是否包括e.Datacol.Name,如果包括,则重算该列的自定义公式即可。


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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/3/31 15:28:00 [显示全部帖子]

以下是引用cpayinyuan在2009-3-31 15:26:00的发言:

    对了,顺便请教一个问题,在这种情况下,Datacolchanged事件中的代码顺序可能会有点乱,可能会造成先计算第3列,然后再计算第6列,再计算第1列,……,这样对表中计算的正确性有无影响?


不会有任何问题,因为按照我的方法,相关列一变动,公式就会重算。


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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/4/1 9:50:00 [显示全部帖子]

经过测试,eval不支持iif的

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/4/1 10:18:00 [显示全部帖子]

如果用Eval定义并执行函数,要等下次更新。
但是Eval不是唯一的选择,可以看看帮助文件“开发篇 - foxtable编程 - 自定义函数 - 动态函数管理”。


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