以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  DataColChanged和DataColChanging执行的逻辑  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=118512)

--  作者:cd_tdh
--  发布时间:2018/5/4 15:13:00
--  DataColChanged和DataColChanging执行的逻辑

DataColChanging代码

If e.DataCol.Name = "项目编码"  Then
    Dim dr  As  DataRow
    dr = e.DataTable.Find("项目编码 = \'" & e.NewValue &  "\'")
    If dr IsNot Nothing Then
        MessageBox.Show("该笔保证金已申请退款,请勿重复申请!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
        e.Cancel = True
        Return
    End  If
End  If

DataColChanged代码


If e.DataCol.Name = "项目名称" Then  \'如果内容发生变动的是品名列
    If e.NewValue Is Nothing Then  \'如果新值是空白,也就是品名列的内容为空
        e.DataRow("项目编码") = Nothing \'那么清空此行单价列的内容
        e.DataRow("所属机构") = Nothing \'那么清空此行单价列的内容
        e.DataRow("项目类别") = Nothing \'那么清空此行单价列的内容
        e.DataRow("申请退回保证金_金额") = Nothing \'那么清空此行单价列的内容
        e.DataRow("申请退回保证金_户名") = Nothing \'那么清空此行单价列的内容
        e.DataRow("申请退回保证金_账号") = Nothing \'那么清空此行单价列的内容
        e.DataRow("申请退回保证金_开户银行") = Nothing \'那么清空此行单价列的内容
    Else
        Dim dr  As  DataRow \'否则在产品表查找同名的产品行,将找到的行赋值给变量dr
        dr = DataTables("打保证金表").SQLFind("[项目名称] = \'" & e.NewValue &  "\'")
        If dr IsNot  Nothing  Then  \'如果找到了同名的产品行,也就是dr不是Nothing
            \'清空行代码
            Dim fdr  As  DataRow
            fdr = e.DataTable.sqlFind("项目编码 = \'" & dr("项目编码") &  "\'")
            If fdr IsNot Nothing Then
                MessageBox.Show("该笔保证金已申请退款,请勿重复申请!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
                For Each dc As DataCol In e.DataTable.datacols
                    If dc.Expression = "" Then
                        e.DataRow(dc.name)=Nothing
                   End If
               Next
           Else
                e.DataRow("项目编码") = dr("项目编码")
                e.DataRow("所属机构") = dr("所属机构")
                e.DataRow("项目类别") = dr("项目类别")
                e.DataRow("申请退回保证金_金额") = dr("保证金缴纳信息_金额")
                e.DataRow("申请退回保证金_户名") = dr("付款方信息_户名")
                e.DataRow("申请退回保证金_账号") = dr("付款方信息_账号")
                e.DataRow("申请退回保证金_开户银行") = dr("付款方信息_开户银行")
            End  If
        End If
    End If
End If

 

 

我另外加一个条件,放哪儿都不对,逻辑乱了,请老师看看应该放哪儿?语法和用法都没问题

 \'判断是否到公司账户
If dr("保证金状态") <> "已到公司账户" Then
         Dim r As Row = Tables("退保证金表").Current
         r.Reject()
         MessageBox.Show("该笔保证金还未到账,请耐心等待!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
         Forms("退投标保证金窗口").Close()
    Return
End If


--  作者:有点甜
--  发布时间:2018/5/4 15:38:00
--  

1、这种处理肯定是错误的

 

         Dim r As Row = Tables("退保证金表").Current
         r.Reject()

 

2、你要做什么功能?此表和退保证金表的联系是什么?通过什么关联?

 

请尽量做个实例上来测试


--  作者:cd_tdh
--  发布时间:2018/5/4 15:49:00
--  

我退保证金表有一个按钮新增行、打开窗口,通过窗口控件选择“打保证金表“的项目名称,引用部分列数据,引用前判断编号是否重复,重复就清空当前行,没有重复再判断“打保证金表”保证金状态是否为“已到公司账户”,不是就返回。


--  作者:有点甜
--  发布时间:2018/5/4 15:55:00
--  
那你的引用和赋值,可以在窗口里面控制,没必要写在datacolchanged事件里面。也可以先判断状态后再赋值进去
--  作者:cd_tdh
--  发布时间:2018/5/4 16:42:00
--  

做了个示例,老师看看呢。

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


--  作者:有点甜
--  发布时间:2018/5/4 17:35:00
--  

 

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


 


--  作者:cd_tdh
--  发布时间:2018/5/7 12:49:00
--  
以下是引用有点甜在2018/5/4 17:35:00的发言:

 

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


 

有点甜老师,这样处理,我其他控件绑定了字段,新增时,窗口控件就有内容,有没办法清空?还是只能所有控件都采用赋值方式处理呢?


--  作者:有点蓝
--  发布时间:2018/5/7 13:31:00
--  
都使用赋值方式处理
--  作者:cd_tdh
--  发布时间:2018/5/7 16:50:00
--  

老师,麻烦看一下,当我启用输入助手后,输入其中一个字或词,选择后也会提示项目已经存在,比如我输入二,在选择项目二时,就会提示项目存在,怎么解决呢?

 


图片点击可在新窗口打开查看此主题相关图片如下:qq截图20180507165850.png
图片点击可在新窗口打开查看
[此贴子已经被作者于2018/5/7 17:00:38编辑过]

--  作者:有点蓝
--  发布时间:2018/5/7 16:59:00
--  
这个无法控制。使用自定义录入界面吧:http://www.foxtable.com/webhelp/scr/2116.htm