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