以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 想用父表出发子表的表达式列的DataColChanged事件 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=70281) |
-- 作者:guning007 -- 发布时间:2015/6/18 11:57:00 -- 想用父表出发子表的表达式列的DataColChanged事件 父表(订单BC)有一个逻辑列(采购),子表(订单明细BC)有一个表达式列(采购)=父表的(采购)列,两个表通过(编码)列关联。 我想通过父表(采购)列的选中触发子表中对应行的DataColChanged事件,我看帮助自己弄出来的代码如下,但是不能正常工作,请帮忙修改一下。 另外,第三行的DataRows()的括号里面应该写什么?第五行不知道是不是只能用于判断数值或者字符列的,能否用于判断逻辑列? 谢谢! If e.DataCol.Name = "采购" Then Dim crs As List(Of DataRow) crs = DataTables("订单BC").DataRows().GetChildRows("订单明细BC") \'找出"订单明细BC"表对应的子行 For Each cr As DataRow In crs If cr IsNot Nothing Then DataTables("订单明细BC").DataCols("采购").RaiseDataColChanged(cr) \'通知系统这些子行的采购列的选中状态发生了改变,触发DataColChanged事件 End If Next End If
|
-- 作者:Bin -- 发布时间:2015/6/18 11:57:00 -- 表达式列是没有DataColChanged事件的.无法触发 |
-- 作者:大红袍 -- 发布时间:2015/6/18 12:01:00 -- 红色代码改成数据列,不能用表达式列
If e.DataCol.Name = "采购" Then
Dim crs As List(Of DataRow)
crs = DataTables("订单BC").DataRows().GetChildRows("订单明细BC") \'找出"订单明细BC"表对应的子行
For Each cr As DataRow In crs
DataTables("订单明细BC").DataCols("某列").RaiseDataColChanged(cr) \'通知系统这些子行的采购列的选中状态发生了改变,触发DataColChanged事件
Next
End If
|
-- 作者:guning007 -- 发布时间:2015/6/18 12:07:00 -- Bin版,帮助文件中说可以通过子表出发父表事件,就是针对表达式列的。 通过子表触发父表事件 If e.Col.name = "数量" Then If e.Col.name = "数量" Then |
-- 作者:大红袍 -- 发布时间:2015/6/18 12:18:00 --
[此贴子已经被作者于2015/6/18 12:18:15编辑过]
|
-- 作者:大红袍 -- 发布时间:2015/6/18 12:20:00 -- 帮助文档有问题。
但子表的数量列不是表达式列啊,父表的才是表达式列啊。
如果你子表的采购列是表达式列,引用父表的数据,你那段代码根本就不需要写。 |
-- 作者:guning007 -- 发布时间:2015/6/18 12:31:00 -- 红版,子表是表达式列,引用父表的采购逻辑列,父表选中然后子表就选中。 如果这种办法行不通的话,那我就把子表的采购列改回数据列,然后通过您之前给的办法2,取得父表行的方法来实现父表选中子表也选中的目的,这样就能实现DataColChanged事件了吧? 您当时给我的代码是 Dim pr As DataRow = e.Row.DataRow.GetParentrow("订单表") If pr("审核") Then e.Cancel = True 请问这段代码我要写在哪里?子表 “订单明细BC” 的DataColChanged事件中吗?但是父表 ”订单明细BC“ 的采购逻辑列选中时并不会出发子表的事件呀? Dim pr As DataRow = e.Row.DataRow.GetParentrow("订单BC") If pr("采购") = True Then
e.DataRow("采购") = True Else
e.DataRow("采购") = False End If |
-- 作者:guning007 -- 发布时间:2015/6/18 12:38:00 -- 红版,我把我想实现的逻辑再理一下。 在主表选中“采购”列,然后子表的“采购”列们也自动选中,接下来出发子表的DataColChanged事件,把子表的行复制到另一张表去(复制行的代码我已经测试过了,可以正常工作)。 我之前是采用子表”采购“列用表达式列引用父表的“采购”列,但是这样子表的DataColChanged事件不会被触发。 解决的方向有两个 1.
在主表选中“采购”列时,不但自动让子表的“采购”列们选中,同时要出发这些行的DataColChanged事件。 2.
如果第一个方向行不通,那么就要用代码来实现主表子表同时选中“采购”列的功能。 请红版指点
|
-- 作者:guning007 -- 发布时间:2015/6/18 14:14:00 -- 红版,我自己琢磨出来了。 我选了第二个方向。 在主表“订单BC”的DataColChanged事件里面加上了如下代码 If e.DataCol.Name = "采购" AndAlso e.DataRow("采购") = True Then Dim drs As List(Of DataRow) drs = e.DataRow.GetChildRows("订单明细BC") For Each dr As DataRow In drs dr("采购") = True Next End If 然后,我在主表的某行选中“采购”列,然后子表的关联行的“采购”列也都被选中了,而且子表的DataColChanged事件也成功被触发了。 多谢红版的启发,引用Bin版的一句经典的话:“实践出真知啊!”
|