在更新记录值时,确定何时使用e.Row属性或cache.SetValue / SetValueExt时遇到一些麻烦。在T200课程中,pdf中有一部分内容是
要更新在数据中当前字段之后 定义的字段 访问类,请按如下所示使用e.Row数据记录的属性。
ShipmentLine line = e.Row as ShipmentLine;
...
line.Description
要更新在数据中当前字段之前之前定义的字段 访问类,请使用SetValueExt <>()方法:
sender.SetValueExt<ShipmentLine.ProductID>(e.Row, GiftCardID);
在这些情况下,当他们说“之前”和“之后”时,它们指的是什么?如果我的DAC字段声明的顺序如下:
Field1 {get;set;}
Field2 {get;set;}
Field3 {get;set;}
从字面上看,这真的意味着,如果我在“ Field2.FieldUpdated()”中,我将不得不像这样更新Field1和Field3吗?
sender.SetValueExt<ShipmentLine.Field1>(e.Row, "X");
line.Field3 = "X";
此外,关于何时使用哪种方法有一些硬性规定吗?即如果在RowUpdated事件中,则使用“ X”;如果在FieldUpdated事件中,则使用“ Y”。
答案 0 :(得分:1)
您将主要遇到三种类型的作业:
1. record.Field = "value"
2. cache.SetValue<T>
3. cache.SetValueExt<T>
方法1和方法2基本相同。他们分配值而不引发事件。实际的区别在于,使用方法2可以避免强制转换。
// 1. With cast
ShipmentLine line = e.Row as ShipmentLine;
if (line != null)
{
line.Description = "value";
}
// 2. Without cast
sender.SetValue<ShipmentLine.description>(e.Row, "value");
当您希望分配引发FieldUpdated事件时,应使用SetValueExt。用户更改其值时,UI上的许多字段都会引发事件。如果用户更改了销售订单的数量字段,它将引发FieldUpdated事件,这将反过来重新计算总价。
如果要从代码中以编程方式更改数量,则应使用SetValueExt,因为它将确保使用事件系统重新计算总成本。当您尝试复制用户在屏幕上的操作时,此功能特别有用,因为默认情况下,UI控制所有引发事件。