如何实现Telerik RadGrid的OnCustomAggregate,排除勾选行求和
问题:Telerik RadGrid自定义聚合:排除勾选行计算组页脚和网格页脚的价格总和
我在ASP页面中使用Telerik RadGrid,该网格按组织名列分组。我需要在组页脚和网格页脚中对价格列求和,但要排除复选框被勾选的行。
目前已经为价格列设置了Aggregate="Custom",并为RadGrid绑定了OnCustomAggregate="rg_CustomAggregate"事件,现在需要实现rg_CustomAggregate方法,遍历行计算未勾选行的价格总和,当前方法框架如下:
protected void rg_CustomAggregate(object sender, GridCustomAggregateEventArgs e) { int sum = 0; if (e.Item is GridGroupFooterItem) { // TODO: 实现逻辑 e.Result = sum; } if (e.Item is GridFooterItem) { // TODO: 实现逻辑 e.Result = sum; } }
我在网上难以找到相关示例,求该方法的具体实现思路。
解决方案
我来帮你拆解这个实现逻辑,核心就是根据当前处理的是组页脚还是网格页脚,分别定位到对应的行集合,过滤掉勾选的行后再求和:
1. 组页脚的求和逻辑
当e.Item是GridGroupFooterItem时,我们只需要处理当前组下的所有数据行,检查每行的复选框状态,累加未勾选行的价格:
protected void rg_CustomAggregate(object sender, GridCustomAggregateEventArgs e) { // 建议用decimal类型存储价格,避免精度丢失,根据实际场景调整 decimal sum = 0; if (e.Item is GridGroupFooterItem groupFooter) { // 获取当前组对应的所有数据行 var groupDataItems = groupFooter.Group.DataItems; foreach (GridDataItem dataItem in groupDataItems) { // 替换成你实际的复选框ID CheckBox chkSelect = (CheckBox)dataItem.FindControl("chkSelect"); if (chkSelect != null && !chkSelect.Checked) { // 替换成你价格列的DataField,这里用解析文本的方式,也可以直接取数据源对象 if (decimal.TryParse(dataItem["Price"].Text, out decimal price)) { sum += price; } } } e.Result = sum; } if (e.Item is GridFooterItem footer) { // 遍历整个网格的所有数据行 foreach (GridItem item in rg.MasterTableView.Items) { // 只处理数据行,跳过组头、组页脚等非数据项 if (item is GridDataItem dataItem) { CheckBox chkSelect = (CheckBox)dataItem.FindControl("chkSelect"); if (chkSelect != null && !chkSelect.Checked) { if (decimal.TryParse(dataItem["Price"].Text, out decimal price)) { sum += price; } } } } e.Result = sum; } }
几个关键注意点:
- 控件与列名替换:一定要把代码中的
chkSelect(复选框ID)和Price(价格列DataField)换成你实际项目中的对应值。 - 强类型数据源优化:如果你的RadGrid绑定的是强类型集合(比如
List<OrderModel>),可以直接从dataItem.DataItem取模型对象,这样比解析文本更可靠:var order = (OrderModel)dataItem.DataItem; if (!order.IsSelected) { sum += order.Price; } - 性能考量:如果网格数据量极大,遍历所有行可能有性能损耗,你可以在绑定数据时提前维护未勾选行的价格总和缓存;但常规数据量下,直接遍历完全够用。
内容的提问来源于stack exchange,提问作者jahrentorp
相关产品推荐
相关产品推荐

