0

我有一个包含计算字段列的数据表表单。但是,即使它具有正确的值,该字段也不会显示。有问题的字段是“numRisk”:

Sub Calculate_Risk (Form As Object)
    Dim OrderPrice, IfDonePrice, TotBrSymComm, BrComm, Risk As Double
    Dim Symbol As String
    Dim IntRateMult, noContracts As Integer
    If MinTick = 0 OR Rate = 0 Then
       Exit Sub
    End If
    Symbol = RTrim(Form.getByName("txtSymbol").CurrentValue)
    If Symbol = "" Then
       Exit Sub
    End If
    OrderPrice = Form.getByName("fmtOrder_Price").CurrentValue
    IfDonePrice = Form.getByName("fmtIf_Done_Price").CurrentValue
    noContracts = Form.getByName("fmtNo_Contracts").CurrentValue
    If NOT USIntRates Then
       Risk = ABS(OrderPrice - IfDonePrice) / MinTick
    Else
       Risk = ABS(OrderPrice\1 - IfDonePrice\1) * MinTick
       IntRateMult = IIf(Symbol = "FV" OR Symbol = "TU",400, 200)
       Risk = ABS(Risk - IntRateMult * ABS(OrderPrice - OrderPrice\1
       IfDonePrice + IfDonePrice\1)) 
    End If
    Risk = Risk * MinTickVal / Rate
    TotBrSymComm = BrSymComm + BrSymCommAud
    BrComm = IIf(TotBrSymComm = 0, BrCommission, BrSymCommAud + BrSymComm/Rate)
    Risk = noContracts*(Risk + BrComm * 2)
    Form.getByName("numRisk").Value = Risk
 End Sub

该子例程从以下例程调用,该例程在加载表单时触发:

Sub FromListForm(Event as Object)
     Dim Form As Object
     Dim TodaysDate As New com.sun.star.util.Date
     Dim CurrDate As Date
     Form=Event.Source.getByName("MainForm_Grid")
     Form.RowSet.first()
     Do Until Form.RowSet.isAfterLast()
        Get_Contract(Form)
        Get_Broker_Comm(Form)
        Calculate_Risk(Form)
        If isEmpty(Form.getByName("OrderDate").Date) Then
           CurrDate = Date()
           TodaysDate.Day = Day(CurrDate)
           TodaysDate.Month = Month(CurrDate)
           TodaysDate.Year = Year(CurrDate)
           Form.getByName("OrderDate").CurrentValue = TodaysDate
        End If
        Form.RowSet.next()
     Loop
     Form.RowSet.last()
End Sub

还有一种更有效的方法来循环遍历行吗?由于这看起来很慢,我可以看到行指针在处理每一行时在表格中向下移动。

4

1 回答 1

0

如果我理解正确,您是在尝试将单个值输入到 tablegrid 控件列中的每个单元格中吗?我不相信这是可能的。

在 tablegrid 控件中,所有值都必须来自底层查询。我建议编写一个查询来进行这些计算,并使用该查询作为表单的基础——这将解决显示计算结果的问题以及提高表单的加载速度(因为确定查询结果的数据库逻辑几乎总是比逐行执行的宏更有效)。

或者,您可以让计算字段是独立的,仅显示 tablegrid 控件当前选定行的计算结果。在这种情况下,“表单加载”事件只会对第一行进行计算,并且每次行选择更改时都会触发计算宏。

于 2015-11-12T19:32:45.903 回答