1、ASPxGridview设置GroupSummary(当然得把Footer这些打开)
2、开工率的SummaryType设置为Custom
<GroupSummary>
<dx:ASPxSummaryItem DisplayFormat="{0}" FieldName="总合同数" ShowInGroupFooterColumn="总合同数" SummaryType="Sum" />
<dx:ASPxSummaryItem DisplayFormat="{0}" FieldName="已开工数" ShowInGroupFooterColumn="已开工" SummaryType="Sum" />
<dx:ASPxSummaryItem DisplayFormat="{0}" FieldName="开工率" ShowInGroupFooterColumn="开工率(%)" SummaryType="Custom" />
</GroupSummary>
3、控件事件:OnCustomSummaryCalculate
decimal _contract = 0; //定义总合同数变量
decimal _working = 0; //定义开工数变量
protected void ASPxGridView1_CustomSummaryCalculate(object sender, DevExpress.Data.CustomSummaryEventArgs e)
{
ASPxSummaryItem item = e.Item as ASPxSummaryItem;// 需要引用DevExpress.Web.ASPxGridView;
if (item.FieldName == "开工率")//如果列为开工率的列
{
if (e.IsGroupSummary)//如果是分组
{
if (e.SummaryProcess == DevExpress.Data.CustomSummaryProcess.Start)//开始计算前
{
_contract = 0;
_working = 0;
e.TotalValue = 0;
}
else if (e.SummaryProcess == DevExpress.Data.CustomSummaryProcess.Calculate)//计算
{
_contract += Math.Round((decimal)e.GetValue("总合同数"), 2);//取总合同数进行累加赋值给公共变量
_working += Math.Round((decimal)e.GetValue("已开工数"), 2);//取已开工数进行累加赋值给公共变量
}
else if (e.SummaryProcess == DevExpress.Data.CustomSummaryProcess.Finalize)//计算完成
{
e.TotalValue = Math.Round(_working / _contract * 100, 2);//开工/合同*100,取两位小数
}
}
}
}
效果