1

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

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

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

我设法通过处理DataBoundRadGrid 的事件并手动填充页脚中的单元格来做到这一点。GridFooterItem(我必须在事件中捕获,然后在它为我自动计算 A 和 B 的总数之后ItemCreated,将值放入事件中。)这感觉很hacky - 也许有更好的方法......?DataBound

无论如何,重要的一点是:

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

我试过使用myGridGroupFooterItem.Cells[],但这TableCellCollection包含的单元格比我预期的要多,所以通过整数索引访问它们感觉有点麻烦(特别是因为这是一个用户定义的报告,所以列可能是任何顺序)。

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

4

4 回答 4

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
}


}
于 2009-12-17T17:34:33.657 回答
1

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

迪克

于 2010-01-05T14:48:22.390 回答
1

试试这个

在 Aspx 页面中:

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

(或者)

在页面后面的代码中:

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
于 2011-10-29T05:48:06.900 回答
-1

好吧,如果您使用自定义公式来计算结果,而不是像 sum、average 等标准聚合,您可能不得不依赖自己的逻辑。组页脚中的单元格应该可以通过唯一名称进行索引——我记得以前的 Telerik ASP.NET Grid 版本不支持这一点,但这是在更新的版本中添加的——2009 年第二季度或第三季度。

迪克

于 2009-12-17T17:23:35.997 回答