将相关表的值分配给VS LightSwitch中的新表

时间:2012-12-06 18:21:51

标签: vb.net nullreferenceexception visual-studio-lightswitch

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

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

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

我尝试过:

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的新手,如果你帮助我,我将非常感激..

非常感谢!

1 个答案:

答案 0 :(得分: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 ),换句话说,实体具有值,然后再使用任何值它的属性。此外,您无法使用&lt;&gt; Nothing 进行比较,您必须使用 IsNot

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

Private Sub unitPrice_Compute(ByRef result As Decimal)
  result = If(Me.tProduct Is Nothing, 0, Me.tProduct.price)
End Sub