Previous topicNext topic
Help > 使用指南 > 数据规范 > 08自动填充 >
统计明细订单的金额到主表

下面我们就以一个示例来说明自动填充的使用方法。我们做一个将订单明细中的金额回写到主订单中。

第一步:先在明细表中创建一个临时列,并设置表达公式,用来计算出明细表中每一条记录的金额。请注意,这里一定要设置临时列,因为只有临时列中的值变化才会触发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:
}