Foxtable(狐表)用户栏目专家坐堂 → [求助]根据输入内容跨表改变字段的值[已解决]


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

主题:[求助]根据输入内容跨表改变字段的值[已解决]

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


加好友 发短信
等级:小狐 帖子:383 积分:2439 威望:0 精华:0 注册:2011/12/3 22:19:00
[求助]根据输入内容跨表改变字段的值[已解决]  发帖心情 Post By: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编辑过]

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


加好友 发短信
等级:小狐 帖子:383 积分:2439 威望:0 精华:0 注册:2011/12/3 22:19:00
  发帖心情 Post By:2012/5/8 9:13:00 [显示全部帖子]

第一个问题是自己对帮助文件没有认真学习的结果,现在已经解决了,我还模仿改进了另一个状态,感谢狐狸爸爸。

关于第二个问题,当我清空数据之后,这一行不是空着了吗,我希望把空行删除掉,所以增加了删除代码。


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


加好友 发短信
等级:小狐 帖子:383 积分:2439 威望:0 精华:0 注册:2011/12/3 22:19:00
  发帖心情 Post By: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))

 回到顶部