以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 关于代码联动的问题? (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=91233) |
-- 作者:yancheng -- 发布时间:2016/10/4 15:29:00 -- 关于代码联动的问题? 有:入库明细,表:DataColChanged 事件如下: Sel ect Case e.DataCol.name Case "入库单价" Dim dr As DataRow = e.DataRow Dim cmd As New SQLCommand Dim dt As DataTable cmd.C cmd.CommandText = "SEL ECT * F rom {材料} Where [定额编码] = \'" & dr("定额编码") & "\'" dt = cmd.ExecuteReader(True) If dt.DataRows.Count > 0 Then dt.DataRows(0)("成本价") = dr("入库单价") dt.Save() End If 有,材料,表:DataColChanged 事件如下: Sele ct e.DataCol.Name Case "成本价" If e.DataRow.IsNull("运杂费") Then MessageBox.show(0) e.DataRow("材料原价")=(e.DataRow("成本价")*e.DataRow("主材损耗率") * ( 1+e.DataRow("利润率")+e.DataRow("挂靠管理费率")))*(1+e.DataRow("增值税率")) Else MessageBox.show(1) e.DataRow("材料原价")=((e.DataRow("运杂费")+e.DataRow("成本价")*e.DataRow("主材损耗率") )* ( 1+e.DataRow("利润率")+e.DataRow("挂靠管理费率")))*(1+e.DataRow("增值税率")) End If End Sele ct 材料,表的:成本价,手动,改变后, e.DataRow("材料原价") 会执行代码,改变。 但是,间接的,通过“入库明细”表,的第一段代码改变了:材料,表的:成本价,后。。材料,表的:材料原价,不变,代码不执行。 请教是哪里的问题?
|
-- 作者:新福星 -- 发布时间:2016/10/4 18:04:00 -- 第一段代码直接改的是材料表的后台数据,无法触发材料表的DataColChanged 事件。 第一段你可以改为用 datatables("材料表").LoadFilter = \'" & dr("定额编码") & "\'" datatables("材料表").Loadtop="" datatables("材料表").Load dim s as row=tables("材料表").Current if s isnot nothing then s("成本价") = e.DataRow("入库单价") s.save end if
|
-- 作者:狐狸爸爸 -- 发布时间:2016/10/5 7:09:00 -- ExecuteReader生成的是一个临时表,你并没有为这个表设置事件,也木有办法设置事件,所以你只能手工编码计算: Sel ect Case e.DataCol.name Case "入库单价" Dim dr As DataRow = e.DataRow Dim cmd As New SQLCommand Dim dt As DataTable cmd.C cmd.CommandText = "SEL ECT * F rom {材料} Where [定额编码] = \'" & dr("定额编码") & "\'" dt = cmd.ExecuteReader(True) If dt.DataRows.Count > 0 Then Dim dr1 AS DataRow = dt.DataRows(0) dr1("成本价") = dr("入库单价") if dr1.isnull("运杂费") then dr1("材料原价")=(dr1("成本价")*dr1("主材损耗率") * ( 1+dr1("利润率")+dr1("挂靠管理费率")))*(1+dr1("增值税率")) Else dr1("材料原价")=((dr1("运杂费")+dr1("成本价")*dr1("主材损耗率") )* ( 1+dr1("利润率")+dr1("挂靠管理费率")))*(1+dr1("增值税率")) End if dt.Save() End If [此贴子已经被作者于2016/10/5 7:14:41编辑过]
|
-- 作者:yancheng -- 发布时间:2016/10/5 12:05:00 -- Sele ct Case e.DataCol.name Case "入库单价" Dim dr As DataRow = e.DataRow DataTables("材料").LoadFilter = "\'" & dr("定额编码") & "\'" DataTables("材料").LoadTop="" DataTables("材料").Load Dim s As Row = Tables("材料").Current If s IsNot Nothing Then s("成本价") = dr("入库单价") s.Save() MessageBox.SHOW(0) End If 我第一次用:小福星,的这个代码,放进去。 MessageBox.SHOW(0) ,弹:0.但是数据没改过来。 s("成本价") 没动? 奇怪,想知道为什么?? 用狐爸的代码可以实现 。只是感觉如果:材料表中,要求:材料原价,变了,还有其它 代码执行,用这种方法可能还得加代码。是不是比较繁琐? 反应时间对比:1,小福星的那个代码,反应时间要:7S左右才行。 2、狐爸这个,马上就OK。 麻烦老师点评一下? 我返回到 table(材料)表,需要手动点一下:同步表,按钮,数据 才会刷新 出来。反应时间:10S,数据行:2万行。我感觉有时候 要刷新两次才行的样子。 我的同步表按钮代码如下: Dim t As Table = CurrentTable If t.IsRelation = False t.DataTable.Load() End If [此贴子已经被作者于2016/10/5 12:09:42编辑过]
|
-- 作者:狐狸爸爸 -- 发布时间:2016/10/5 21:47:00 -- 代码无所谓繁琐,能高效执行就行。 如果材料表只是2万行,何不全部加载? 全部加载的话,就可以常规编码了: http://www.foxtable.com/webhelp/scr/1451.htm |