1

我在VB.Net中使用 LightSwitch (Learning..),这是我的问题:我有一些名为tOrderand的表tProduct
我在 tOrder 中创建了一个具有 UNITPRICE 和 TOTALPRICE 的计算属性。总价格很容易制作:

Private Sub totalPrice_Compute(ByRef result As Decimal)
    result = quantity * unitPrice
End Sub

问题在于unitPrice。我找不到根据用户选择自动分配Pricein值的方法。tProduct可以说tProduct有3种产品。产品 A 的价格为 5,产品 B 的价格为 10,产品 C 的价格为 20。我需要在“新订单”屏幕中,根据用户的选择(如果用户想要产品 A/产品B/产品 C) UnitPriceintOrder自动更改,以便用户查看Pricein的实际价格tProduct

我试过:

Private Sub unitPrice_Compute(ByRef result As Decimal)
            result = Me.tProduct.price
End Sub

但是出现一个错误说:NullReferenceException was unhandled by user code

我也试过:

Private Sub unitPrice_Compute(ByRef result As Decimal)
  If Me.tProduct.nameProduct <> Nothing Then
     result = tProduct.price
  Else
     result = 0
  End If
End Sub

但是同样的错误..

我不知道如何解决它,也不知道在哪里、何时、如何解决它。我是 LightSwitch 的新手,如果你能帮助我,我将不胜感激。

非常感谢!

4

1 回答 1

1

您的代码在tProduct实际具有值之前被调用,因此试图引用其Price属性会导致错误。

您与第二段代码非常接近。它只需要:

Private Sub unitPrice_Compute(ByRef result As Decimal)
  If (Me.tProduct IsNot Nothing) Then
     result = Me.tProduct.price
  Else
     result = 0
  End If
End Sub

在使用实体的任何属性之前,您应该始终检查null(或VB 中的Nothing),即实体具有值。此外,您不能使用<>Nothing进行比较,您必须使用IsIsNot

一个更简单的替代方法是编写这样的代码(尽管上面的版本也很好):

Private Sub unitPrice_Compute(ByRef result As Decimal)
  result = If(Me.tProduct Is Nothing, 0, Me.tProduct.price)
End Sub
于 2012-12-08T12:36:26.627 回答