以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [求助]下拉窗口问题  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=105068)

--  作者:minxizai
--  发布时间: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
--  发布时间: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
--  作者:有点甜
--  发布时间: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
--  发布时间: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
--  发布时间: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

--  作者:有点甜
--  发布时间: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
--  发布时间:2017/8/11 10:57:00
--  
谢谢甜版!

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

--  作者:minxizai
--  发布时间:2017/8/11 19:09:00
--  
甜版,除了使用systemready    还有别的方法实现吗?
用systemready总是有其他列出问题
或者能详解一下systemready吗?帮助文档看着还是不理解。

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

--  作者:minxizai
--  发布时间:2017/8/11 19:22:00
--  
主要问题是追加的代码总是会触发datacolchanged事件,

代码1

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

SystemReady =
True

代码3

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



--  作者:有点蓝
--  发布时间:2017/8/11 21:04:00
--  
在同一个事件里,systemready   不会影响本身任何代码。只是在代码2 执行完毕之前,其他表的事件不执行。

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

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

Case "数量","单价"    


Case "金额"