Foxtable(狐表)用户栏目专家坐堂 → 求助。。。根据条件求和


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

主题:求助。。。根据条件求和

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


加好友 发短信
等级:五尾狐 帖子:1181 积分:8108 威望:0 精华:1 注册:2009/1/17 10:52:00
求助。。。根据条件求和  发帖心情 Post By:2009/5/21 10:32:00 [只看该作者]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:自动求和.table


在表A中根据[计算类别]列与[物品编号]列自动求和。

计算类别列中内容是自动求和的行,就根据代码自动求和,其它的就用人工输入。。都要根据物品编号进行求和。。
Dim dt1 As DataTable
Dim a As String ="自动求和"
dt1 = DataTables("表B")
Dim dr As DataRow = e.DataRow
if e.DataCol.Name = "物品编号" OrElse e.DataCol.Name = "计算类别"  Then
    if dr.IsNull("物品编号")= False AndAlso dr.IsNull("计算类别") = false Then
      if dr.("计算类别")= a then
      dr("求和数量") = dt1.Compute("Sum(发出数量)","[物品编号] = '" & dr("物品编号") & "'")
      end if
    End if
End If



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


加好友 发短信
等级:童狐 帖子:252 积分:1355 威望:0 精华:0 注册:2009/4/5 13:06:00
  发帖心情 Post By:2009/5/21 12:03:00 [只看该作者]

将表B发出数量列改成数值型。
将上面代码中的if dr.("计算类别")= a then改成 if dr("计算类别")= a then

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


加好友 发短信
等级:五尾狐 帖子:1181 积分:8108 威望:0 精华:1 注册:2009/1/17 10:52:00
  发帖心情 Post By:2009/5/21 13:46:00 [只看该作者]

我想当B表中一有变动,A表马上也做出变动。
应该怎么改代码

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


加好友 发短信
等级:童狐 帖子:252 积分:1355 威望:0 精华:0 注册:2009/4/5 13:06:00
  发帖心情 Post By:2009/5/21 13:56:00 [只看该作者]

在表B设置重置表A的代码即可。

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


加好友 发短信
等级:童狐 帖子:252 积分:1355 威望:0 精华:0 注册:2009/4/5 13:06:00
  发帖心情 Post By:2009/5/21 14:03:00 [只看该作者]

以下是引用卟离卟弃在2009-5-21 13:46:00的发言:
我想当B表中一有变动,A表马上也做出变动。
应该怎么改代码


这种要求最简单的方法是两表以物品编号建立关联。
然后增加一个表达式列,表达式为:iif([计算类别]='自动求和',Sum(Child(关联名).发出数量),[求和数量])

[此贴子已经被作者于2009-5-21 14:03:29编辑过]

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


加好友 发短信
等级:五尾狐 帖子:1181 积分:8108 威望:0 精华:1 注册:2009/1/17 10:52:00
  发帖心情 Post By:2009/5/21 20:48:00 [只看该作者]

不用表达式列。。。。
如果不用表达式列就一定要按重置????

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


加好友 发短信
等级:童狐 帖子:252 积分:1355 威望:0 精华:0 注册:2009/4/5 13:06:00
  发帖心情 Post By:2009/5/21 21:34:00 [只看该作者]

可以设置代码用RaiseDataColChanged进行重置。

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


加好友 发短信
等级:五尾狐 帖子:1181 积分:8108 威望:0 精华:1 注册:2009/1/17 10:52:00
  发帖心情 Post By:2009/5/22 10:54:00 [只看该作者]

我在表事件和项目事件中都没找到。。。。。。。。
在那儿

 回到顶部
美女呀,离线,留言给我吧!
yangming
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:超级版主 帖子:4109 积分:23338 威望:0 精华:21 注册:2008/9/1 20:07:00
  发帖心情 Post By:2009/5/22 11:07:00 [只看该作者]

RaiseDataColChanged不是事件,请看下面,它是重置DataCol的一个方法

RaiseDataColChanged

手工针对该列触发DataColChanged事件。
关于事件,我们会有专门的章节讲述。

语法

RaiseDataColChanged
RaiseDataColChanged(DataRow)

DataRow:可选参数,针对此行触发DataColChanged事件,如果省略此参数,则针对所有行触发。

例如年龄列由出生日期计算得出,我们将DataColChanged事件设为:

If e.DataCol.Name = "出生日期" Then
    If
e.DataRow.IsNull("出生日期") Then '如果没有输入出生日期
       
e.DataRow("年龄") = Nothing '则清空年龄
    Else
   
    '否则计算年龄
       
e.DataRow("年龄") = Date.Today.Year - e.DataRow("出生日期").Year

    End If
End If

如果到了明年,需要重新计算年龄列,但是除非你重新输入出上日期,否则上面的代码是不会重算年龄的。
不过你可以通过下面的代码,强行针对出生日期列触发DataColChanged,效果就像你重新输入了出生日期一样:

DataTables("员工").DataCols("出生日期").RaiseDataColChanged()

其实我们并不需要编码去完成这样的任务,首选选择出生日期列,然后在“数据表”功能区“设置列”功能组,单击下面的“重置”按钮,即可针对出生日期列触发DataColChanged事件,计算出最新的年龄:


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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/5/22 11:08:00 [只看该作者]

RaiseDataColChanged是一个方法,不是事件。
你看看帮助文件中“用事件进行计算”,全部看一次,就明白RaiseDataColChanged是个什么玩艺了。

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