Foxtable(狐表)用户栏目专家坐堂 → [求助]下拉窗口问题


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

主题:[求助]下拉窗口问题

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


加好友 发短信
等级:幼狐 帖子:175 积分:1652 威望:0 精华:0 注册:2015/6/10 13:50:00
[求助]下拉窗口问题  发帖心情 Post By:2017/8/10 20:59:00 [只看该作者]

同样的代码,紫色的代码不起作用,找了很久都没找到原因
为什么先选择商品再删除,然后重新选择就有用了?
If e.Selected Then '如果选择了值
    Dim tbl As Table = Tables("下拉_Table1")
    If tbl.Current IsNot Nothing Then
        e.Form.DropDownBox.Value = tbl.Current("商品名称")
        If kou = "入库明细" Then
            Tables("入库.入库明细").Current("规格") = tbl.Current("规格")
            Tables("入库.入库明细").Current("单位") = tbl.Current("大单位")
            Tables("入库.入库明细").Current("单价") = tbl.Current("进货价")
        Else
            Tables("出库.出库明细").Current("规格") = tbl.Current("规格")
            Tables("出库.出库明细").Current("副单位") = tbl.Current("中单位")
            If xia = 0 Then
                Tables("出库.出库明细").Current("单位") = tbl.Current("大单位")
            ElseIf xia = 1 Then
                Tables("出库.出库明细").Current("单位") = tbl.Current("中单位")
            End If
        End If
        If e.Form.DropTable IsNot Nothing Then '如果是通过表下拉的
            e.Form.DropTable.FinishEditing()
        Else '如果是通过窗口下拉的
            e.Form.DropDownBox.WriteValue()
        End If
    End If
End If
[此贴子已经被作者于2017/8/10 22:05:29编辑过]

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


加好友 发短信
等级:幼狐 帖子:175 积分:1652 威望:0 精华:0 注册:2015/6/10 13:50:00
  发帖心情 Post By:2017/8/10 22:49:00 [只看该作者]

Select Case e.DataCol.name
    Case "商品名称"
        If e.DataRow.Isnull("商品名称") Then
            Dim ts() As String = {"规格","数量","单价","金额","单位"}
            For Each t As String In ts
                e.DataRow(t) = Nothing
            Next
        Else
            Dim q As DataRow = DataTables("商品").Find("商品名称 = '" & e.DataRow("商品名称") & "'")
            If q IsNot Nothing Then
                e.DataRow("单价") = q("进货价")
                e.DataRow("数量") = 1
            End If
        End If
    Case "数量","单价"     '为什么这个地方变成 Case "数量" 就能用了?是所有都需要用isnull进行判断吗?
        e.DataRow("金额") = e.DataRow("数量") * e.DataRow("单价")
        Dim r As String = Tables("入库").current("编号")
        Tables("入库").current("采购数量") = Tables("入库.入库明细").DataTable.Compute("sum(数量)","编号 = '"& r &"'")
    Case "金额"
        e.DataRow("单价") = e.DataRow("金额") / e.DataRow("数量")
        Dim r As String = Tables("入库").current("编号")
        Tables("入库").current("应付货款") = Tables("入库.入库明细").DataTable.Compute("sum(金额)","编号 = '"& r &"'")
End Select

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/8/10 22:55:00 [只看该作者]

改一下代码

 

   Case "数量","单价"    

        SystemReady = False  '不触发 金额 的datacolchanged事件
        e.DataRow("金额") = e.DataRow("数量") * e.DataRow("单价")
        Dim r As String = Tables("入库").current("编号")
        Tables("入库").current("采购数量") = Tables("入库.入库明细").DataTable.Compute("sum(数量)","编号 = '"& r &"'")

        SystemReady = True


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


加好友 发短信
等级:幼狐 帖子:175 积分:1652 威望:0 精华:0 注册:2015/6/10 13:50:00
  发帖心情 Post By:2017/8/10 23:08:00 [只看该作者]

以下是引用有点甜在2017/8/10 22:55:00的发言:

改一下代码

 

   Case "数量","单价"    

        SystemReady = False  '不触发 金额 的datacolchanged事件
        e.DataRow("金额") = e.DataRow("数量") * e.DataRow("单价")
        Dim r As String = Tables("入库").current("编号")
        Tables("入库").current("采购数量") = Tables("入库.入库明细").DataTable.Compute("sum(数量)","编号 = '"& r &"'")

        SystemReady = True



Select Case e.DataCol.name
    Case "商品名称"
        If e.DataRow.Isnull("商品名称") Then
            Dim ts() As String = {"规格","数量","单价","金额","单位"}
            For Each t As String In ts
                e.DataRow(t) = Nothing
            Next
        Else
            e.DataRow("数量") = 1
        End If
    Case "数量","单价"
        SystemReady = False
        e.DataRow("金额") = e.DataRow("数量") * e.DataRow("单价")
        Dim r As String = Tables("入库").current("编号")
        Tables("入库").current("采购数量") = Tables("入库.入库明细").DataTable.Compute("sum(数量)","编号 = '"& r &"'")
        SystemReady = True
    Case "金额"
        e.DataRow("单价") = e.DataRow("金额") / e.DataRow("数量")
        Dim r As String = Tables("入库").current("编号")
        Tables("入库").current("应付货款") = Tables("入库.入库明细").DataTable.Compute("sum(金额)","编号 = '"& r &"'")   ‘这一行没有执行?
End Select


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


加好友 发短信
等级:幼狐 帖子:175 积分:1652 威望:0 精华:0 注册:2015/6/10 13:50:00
  发帖心情 Post By:2017/8/10 23:17:00 [只看该作者]

修改成下面这样后,系统被锁死了,该如何解决?

Select Case e.DataCol.name
    Case "商品名称"
        If e.DataRow.Isnull("商品名称") Then
            Dim ts() As String = {"规格","数量","单价","金额","单位"}
            For Each t As String In ts
                e.DataRow(t) = Nothing
            Next
        Else
            e.DataRow("数量") = 1
        End If
    Case "数量","单价"
        SystemReady = False
        e.DataRow("金额") = e.DataRow("数量") * e.DataRow("单价")
        Dim r As String = Tables("入库").current("编号")
        Tables("入库").current("采购数量") = Tables("入库.入库明细").DataTable.Compute("sum(数量)","编号 = '"& r &"'")
        
    Case "金额"
        e.DataRow("单价") = e.DataRow("金额") / e.DataRow("数量")
        Dim r As String = Tables("入库").current("编号")
       
Tables("入库").current("应付货款") = Tables("入库.入库明细").DataTable.Compute("sum(金额)","编号 = '"& r &"'")   
SystemReady = True
End Select

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/8/11 0:07:00 [只看该作者]

    Case "数量","单价"    

        SystemReady = False  '不触发 金额 的datacolchanged事件
        e.DataRow("金额") = e.DataRow("数量") * e.DataRow("单价")
        Dim r As String = Tables("入库").current("编号")
        Tables("入库").current("采购数量") = Tables("入库.入库明细").DataTable.Compute("sum(数量)","编号 = '"& r &"'")

        Tables("入库").current("应付货款") = Tables("入库.入库明细").DataTable.Compute("sum(金额)","编号 = '"& r &"'")

        SystemReady = True


    Case "金额"
        e.DataRow("单价") = e.DataRow("金额") / e.DataRow("数量")
        Dim r As String = Tables("入库").current("编号")
        Tables("入库").current("应付货款") = Tables("入库.入库明细").DataTable.Compute("sum(金额)","编号 = '"& r &"'")

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


加好友 发短信
等级:幼狐 帖子:175 积分:1652 威望:0 精华:0 注册:2015/6/10 13:50:00
  发帖心情 Post By:2017/8/11 10:57:00 [只看该作者]

谢谢甜版!

[此贴子已经被作者于2017/8/11 11:01:10编辑过]

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


加好友 发短信
等级:幼狐 帖子:175 积分:1652 威望:0 精华:0 注册:2015/6/10 13:50:00
  发帖心情 Post By:2017/8/11 19:09:00 [只看该作者]

甜版,除了使用systemready    还有别的方法实现吗?
用systemready总是有其他列出问题
或者能详解一下systemready吗?帮助文档看着还是不理解。

[此贴子已经被作者于2017/8/11 19:12:31编辑过]

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


加好友 发短信
等级:幼狐 帖子:175 积分:1652 威望:0 精华:0 注册:2015/6/10 13:50:00
  发帖心情 Post By:2017/8/11 19:22:00 [只看该作者]

主要问题是追加的代码总是会触发datacolchanged事件,

代码1

SystemReady = False
'代码2   ‘包含追加数据的代码

SystemReady =
True

代码3

一旦用了systemready   要么是代码1或者代码3不执行,要么是其他表的事件不执行



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


加好友 发短信
等级:超级版主 帖子:111414 积分:567140 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2017/8/11 21:04:00 [只看该作者]

在同一个事件里,systemready   不会影响本身任何代码。只是在代码2 执行完毕之前,其他表的事件不执行。

如果不用systemready   就会造成死循环。

或者下面的case,只能保留其中一个

Case "数量","单价"    


Case "金额"

 回到顶部