Telerik RadGrid的GridGroupFooterItem中的计算单元格

时间:2009-12-17 16:17:14

标签: asp.net telerik radgrid

我正在使用DataTable(System.Data.DataTable)中的数据填充Telerik RadGrid。由于我支持其他人的应用程序,我不能使用任何其他数据源或显示控件。

在我的网格中,我有三列:假设它们是Widgets Produced(A列),Faulty Widgets(B列)和Faultiness Proportion(C列)。数据库查询为我提供这些并进行计算C = B / A.

我在网格底部有一个总计行(Telerik GridFooterItem)。在A列和B列中,Telerik为我计算这些列的总数。我们无法单独从C列计算C列的“总数”的正确值:我们必须用(B的总和)/(A的总和)填充它。

我设法通过处理RadGrid的DataBound事件并手动填充页脚中的单元格来实现此目的。 (我必须抓住GridFooterItem事件中的ItemCreated,然后在DataBound事件中将值放入其中,之后它会自动为我计算A和B的总数。)感觉非常hacky - 也许有更好的方式......?

无论如何,重要的是这个:

我的网格被分成组,因此我还需要填充GridGroupFooterItem中的C列。在这种情况下,我无法使用我的hacky技术:我找到myGridFooterItem["WidgetsProduced"]所需的页脚单元格,但我无法使用myGridGroupFooterItem["WidgetsProduced"]获取组页脚单元格 - 它只是不是不是字典。

我已尝试使用myGridGroupFooterItem.Cells[],但此TableCellCollection包含的内容比我预期的多一些,因此通过整数索引访问它们会感觉有点麻烦(特别是因为这是一个用户 - 已定义的报告,因此列可以按任何顺序排列。)

那么:如何用我的计算填充这些单元格呢?

4 个答案:

答案 0 :(得分:1)

您的商品数据绑定事件看起来像

grd_ItemDataBound(object sender,GridItemEventArgs e)
{
//catch the footer element
if(e.Item.ItemType==GridItemType.GroupFooter)
{
    (e.Item.FindControl("yourTextBox") as TextBox).Text = your calculated value
}


}

答案 1 :(得分:1)

我仔细检查了唯一名称索引器是否适用于2009年第2季度和2009年第3版RadGrid for ASP.NET AJAX,它可以在我的机器上运行。如果需要,请使用Telerik forums检查您的版本并寻求更多帮助。

迪克

答案 2 :(得分:1)

试试这个

在Aspx页面中:

<telerik:GridBoundColumn Aggregate="Sum" DataField="Price" DataFormatString="{0:C}" EmptyDataText="0" FooterText="Total :" HeaderText="Price" UniqueName="Price"> ...

(OR)

在代码页面后面:

Private Sub RadGrid1_ItemDataBound(ByVal sender As Object, ByVal e As Telerik.Web.UI.GridItemEventArgs) Handles RadGrid1.ItemDataBound       
    Dim Item As GridDataItem
    Dim value as Double
    Select Case (e.Item.ItemType)
    Case Telerik.Web.UI.GridItemType.AlternatingItem, Telerik.Web.UI.GridItemType.EditItem,Telerik.Web.UI.GridItemType.Item,Telerik.Web.UI.GridItemType.SelectedItem

        Item = e.Item
    '------ Calculate Total  amount -----------
        Item("TotalPayment").Text = CDbl(Item("TotalPayment").Text) 
        value += CDec(Item("TotalPayment").Text)

    Case Telerik.Web.UI.GridItemType.Footer
        '------ Display the total  amount in Footer ------
        Dim footerItem As GridFooterItem = e.Item
        If Not RadGrid1.Items.Count = 0 Then footerItem("TotalPayment").Text = "Total :" + value
    End Select
End Sub

答案 3 :(得分:-1)

好吧,如果你使用自定义公式计算结果而不是像sum,average这样的标准聚合,你可能必须依靠自己的逻辑。组页脚中的单元格应该可以使用唯一名称进行索引 - 我记得以前的Telerik ASP.NET Grid版本不支持这种格式,但是在最近的版本中添加了这些 - 2009年第二季度或第三季度。

迪克