我正在使用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
包含的内容比我预期的多一些,因此通过整数索引访问它们会感觉有点麻烦(特别是因为这是一个用户 - 已定义的报告,因此列可以按任何顺序排列。)
那么:如何用我的计算填充这些单元格呢?
答案 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年第二季度或第三季度。
迪克