下面我們就以一個示例來說明自動填充的使用方法。我們做一個將訂單明細(xì)中的金額回寫到主訂單中。
第一步:先在明細(xì)表中創(chuàng)建一個臨時列,并設(shè)置表達(dá)公式,用來計算出明細(xì)表中每一條記錄的金額。請注意,這里一定要設(shè)置臨時列,因為只有臨時列中的值變化才會觸發(fā)ColDataChanged事件,才會讓自動填充數(shù)據(jù)規(guī)范生效。
第二步:在此臨時列上再設(shè)置一個自動填充數(shù)據(jù)規(guī)范,用來將明細(xì)表中的金額自動填充到主表中去。
上面這個示例,我們可以看出自動填充的使用方式。但是,自動填充更適合單列統(tǒng)計,像上面示例中的這種場景,需要我們單獨新增一個臨時列作為中轉(zhuǎn),在步驟上是麻煩了一點的。而且臨時列的特點是不保存數(shù)據(jù),每次加載明細(xì)表都需要重新計算,在性能上也不占優(yōu)勢。可能我們直接在明細(xì)表中添加一個基礎(chǔ)列更合適一點。
如果不們不排斥寫代碼的話,其實我們有更簡單的方式,只要在ColDataChanged事件中寫上一點代碼即可。
VB.Net |
Select Case e.ColData.Name Case "單價","數(shù)量" Dim tbl As SmGrid=sender Dim sum As Double sum=tbl.DataTableHelp.DataRows.Sum(Function(a As RowData) CDec(a("數(shù)量")*CDec(a("單價"))) tbl.Relation.ParentGrid.CurrentRowData("總金額") =sum Case Else End Select |
C# |
switch (e.ColData.Name) { case "單價": case "數(shù)量": SmGrid tbl=sender as SmGrid; tbl.Relation.ParentGrid.CurrentRowData["總金額"]=tbl.DataTableHelp.DataRows.Sum<RowData>(a=>a["數(shù)量"].CType<decimal>()*a["單價"].CType<decimal>()); break; default: } |