Cellules calculées dans le GridGroupFooterItem de Telerik RadGrid
Question
Je alimenter une RadGrid Telerik avec les données d'un DataTable (System.Data.DataTable
). Comme je soutiens la demande de quelqu'un d'autre, je ne peux pas utiliser tout autre contrôle de code source ou l'affichage des données.
Dans ma grille, j'ai trois colonnes: disons qu'ils sont Widgets Produit (colonne A), défectueux Widgets (colonne B) et proportion défectuosité (colonne C). La requête de base de données fournit ces pour moi et fait le calcul C = B / A.
I ai une rangée de totaux (un GridFooterItem
Telerik) au bas de la grille. Dans les colonnes A et B Telerik calcule les totaux pour ces colonnes pour moi. Nous ne pouvons pas calculer la valeur correcte pour le « total » de la colonne C de la colonne C seule:. Nous devons remplir avec (la somme de B) / (la somme de A)
J'ai réussi à le faire en manipulant l'événement DataBound
du RadGrid et de remplir manuellement les cellules dans le pied de page. (Je devais attraper le GridFooterItem
en cas de ItemCreated
, puis mettre des valeurs en elle en cas de DataBound
, après avoir calculé automatiquement les totaux pour A et B pour moi.) Cela se sent assez hacky - peut-être il y a une meilleure façon ... ?
Quoi qu'il en soit, le bit important est ceci:
Mon réseau est divisé en groupes, donc je dois aussi remplir la colonne C dans les GridGroupFooterItem
s. Je ne peux pas obtenir ma technique hacky à travailler dans ce cas: Je trouve la cellule de pied de page que je veux avec myGridFooterItem["WidgetsProduced"]
, mais je ne peux pas obtenir les cellules de pied de groupe avec myGridGroupFooterItem["WidgetsProduced"]
- il est tout simplement pas un dictionnaire
Je l'ai essayé d'utiliser myGridGroupFooterItem.Cells[]
, mais ce TableCellCollection
contient quelques autres cellules que je pense, donc les accès par index entier se sent un peu ropey (d'autant plus que c'est un rapport défini par l'utilisateur, de sorte que les colonnes peuvent être dans un ordre quelconque).
Alors: comment puis-je remplir ces cellules avec mon calcul
?La solution
votre article événement databound ressemble à quelque chose comme
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
}
}
Autres conseils
J'ai vérifié si indexeur nom unique fonctionne avec Q2 2009 et Q3 version 2009 de RadGrid pour ASP.NET AJAX et cela a fonctionné sur ma machine. Vérifiez votre version et demander plus d'aide en utilisant le forums Telerik si nécessaire.
Dick
Essayer cette
Dans la page Aspx:
<telerik:GridBoundColumn Aggregate="Sum" DataField="Price" DataFormatString="{0:C}" EmptyDataText="0" FooterText="Total :" HeaderText="Price" UniqueName="Price"> ...
(Ou)
Dans le code behind:
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
Eh bien, si vous utilisez formule personnalisée pour calculer les résultats au lieu d'agrégats standard comme somme, moyenne et ainsi de suite, vous avez probablement compter sur votre propre logique. Les cellules du groupe bas de page devraient être indexables par nom unique - Je me souviens cela n'a pas été pris en charge avec les versions précédentes Telerik ASP.NET grille mais cela a été ajouté dans les versions plus récentes -. Q2 ou Q3 2009
Dick