以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- [求助]根据输入内容跨表改变字段的值[已解决] (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=19368) |
||||
-- 作者:sunbrain -- 发布时间:2012/5/7 23:01:00 -- [求助]根据输入内容跨表改变字段的值[已解决] 有两张表 表1:产品明细表 表2:盘点表 结构如下: 产品明细表:序号 产品名称 单价 数量 状态 盘点表: 序号 产品名称 数量 存储仓库 <!--[if !supportLists]-->1. <!--[endif]-->当我在“盘点表”输入“存储仓库”字段后,需要将“产品明细表”中“状态”字段自动更改为“存储”,也就是说当存储仓库字段不为空值的时候,将产品明细表中的状态自动更改为“存储”。
我现在的代码是将本表中的状态字段更改为存储字段了,但我希望实现的上将“产品明细表”中的状态字段改为“存储”。通过查阅帮助文件,关键词“跨表”,得到如下代码 If e.DataCol.Name = "存储仓库" Then \'当存储仓库中的内容发生变化的时候 If e.DataRow.IsNull("存储仓库") Then \'存储仓库为空 e.DataRow("存储仓库") = Nothing \'如果为空,则清除存储仓库 Else \' e.DataRow("存储仓库") = "存储" Dim dr As DataRow \'否则在产品表查找同名的产品行,将找到的行赋值给变量dr dr = DataTables("产品明细表").Find("[序号] =
\'" & e.NewValue & "\'") If dr IsNot Nothing Then
\'如果找到了同名的产品行,也就是dr不是Nothing e.DataRow("状态") = "存储" End If End If 还是没有实现,不知道问题在哪里,这一点请提示,谢谢 问题2: 清除一行数据后,需要清空后面的数据,并删除该行; 我在datachanged中使用了这样的代码 If e.DataCol.Name = "序号" Then
\'是序号列发生变化吗? If e.DataRow.IsNull("序号")
Then \'判断序号列是否为空 e.DataRow("序号")
= Nothing \'如果为空,则清除序号列 e.DataRow("产品名称")
= Nothing \'如果为空,则产品名称列 e.DataRow("数量")
= Nothing \'如果为空,则清除数量列 e.DataRow("存储仓库")
= Nothing \'如果为空,则清除存储仓库列 End If End If
结果:数据清除功能实现了,但是把全部的空行都删除了,这并不是我想要的结果; 也希望老师指导,谢谢 附件是我做的样本,请参考
[此贴子已经被作者于2012-5-8 9:24:19编辑过]
|
||||
-- 作者:狐狸爸爸 -- 发布时间:2012/5/8 8:26:00 -- 第一个问题帮了改了一下代码:
第二个问题,不明白是什么意思,你不要加删除行的代码就行了啊,你要的只是清空数据而已。 |
||||
-- 作者:sunbrain -- 发布时间:2012/5/8 9:13:00 -- 第一个问题是自己对帮助文件没有认真学习的结果,现在已经解决了,我还模仿改进了另一个状态,感谢狐狸爸爸。 |
||||
-- 作者:狐狸爸爸 -- 发布时间:2012/5/8 9:15:00 -- 没有必要删除的,如果这样,你何必删除序号,直接删除此行不就行了吗? 删除某个单元格的数据并不等于删除行,你这样设计,不符合常规,会给最终用户带来困惑,容易误操作。 |
||||
-- 作者:sunbrain -- 发布时间:2012/5/8 9:24:00 -- 以下是引用狐狸爸爸在2012-5-8 9:15:00的发言: 你说的有道理,我原本的想法是当“序号”这个字段不存在的时候,就把改行直接删除,因此分了两个步骤,先清除数据,在删除改行,想实现自动化,您说的手动删除是一个办法。没有必要删除的,如果这样,你何必删除序号,直接删除此行不就行了吗? 删除某个单元格的数据并不等于删除行,你这样设计,不符合常规,会给最终用户带来困惑,容易误操作。 但是在使用过程中也会遇到空行越来越多,经过查看,我这样解决了。 Dim s As String Dim dt As DataTable = CurrentTable.DataTable For Each dc As DataCol In dt.Datacols If dc.Name<> "序号" Then s+ = " and [" & dc.Name & "] Is null" End If Next dt.DeleteFor(s.substring(5)) |