以文本方式查看主题

-  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]-->当我在“盘点表”输入“存储仓库”字段后,需要将“产品明细表”中“状态”字段自动更改为“存储”,也就是说当存储仓库字段不为空值的时候,将产品明细表中的状态自动更改为“存储”。

以下内容为程序代码:

1
2
3 If e.DataCol.Name = "存储仓库" Then \'当存储仓库中的内容发生变化的时候
4 If e.DataRow.IsNull("存储仓库") Then \'存储仓库为空
5 e.DataRow("存储仓库") = Nothing \'如果为空,则当前字段
6 Else
7 ‘e.DataRow("状态") = "存储" \'将字段值改为存储
8 End If


我现在的代码是将本表中的状态字段更改为存储字段了,但我希望实现的上将“产品明细表”中的状态字段改为“存储”。通过查阅帮助文件,关键词“跨表”,得到如下代码



以下内容为程序代码:



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



CurrentTable.Current.Delete()  ‘
删除该行的代码


结果:数据清除功能实现了,但是把全部的空行都删除了,这并不是我想要的结果;


也希望老师指导,谢谢




附件是我做的样本,请参考

 

 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:管理项目1.table

[此贴子已经被作者于2012-5-8 9:24:19编辑过]

--  作者:狐狸爸爸
--  发布时间:2012/5/8 8:26:00
--  

第一个问题帮了改了一下代码:

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.table

 

第二个问题,不明白是什么意思,你不要加删除行的代码就行了啊,你要的只是清空数据而已。


--  作者: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))