下面我们就以一个示例来说明自动填充的使用方法。我们做一个将订单明细中的金额回写到主订单中。
第一步:先在明细表中创建一个临时列,并设置表达公式,用来计算出明细表中每一条记录的金额。请注意,这里一定要设置临时列,因为只有临时列中的值变化才会触发ColDataChanged事件,才会让自动填充数据规范生效。
第二步:在此临时列上再设置一个自动填充数据规范,用来将明细表中的金额自动填充到主表中去。
上面这个示例,我们可以看出自动填充的使用方式。但是,自动填充更适合单列统计,像上面示例中的这种场景,需要我们单独新增一个临时列作为中转,在步骤上是麻烦了一点的。而且临时列的特点是不保存数据,每次加载明细表都需要重新计算,在性能上也不占优势。可能我们直接在明细表中添加一个基础列更合适一点。
如果不们不排斥写代码的话,其实我们有更简单的方式,只要在ColDataChanged事件中写上一点代码即可。
VB.Net |
Select Case e.ColData.Name Case "单价","数量" Dim tbl As SmGrid=sender Dim sum As Double sum=tbl.DataTableHelp.DataRows.Sum(Function(a As RowData) CDec(a("数量")*CDec(a("单价"))) tbl.Relation.ParentGrid.CurrentRowData("总金额") =sum Case Else End Select |
C# |
switch (e.ColData.Name) { case "单价": case "数量": SmGrid tbl=sender as SmGrid; tbl.Relation.ParentGrid.CurrentRowData["总金额"]=tbl.DataTableHelp.DataRows.Sum<RowData>(a=>a["数量"].CType<decimal>()*a["单价"].CType<decimal>()); break; default: } |