Le celle calcolate in GridGroupFooterItem di Telerik RadGrid
Domanda
Sono compilazione di un Telerik RadGrid con i dati da un DataTable (System.Data.DataTable
). Come sto sostenendo applicazione di qualcun altro, non riesco a utilizzare qualsiasi altro controllo origine dati o la visualizzazione.
Nella mia griglia ho tre colonne: diciamo che sono Widget PRODOTTA (colonna A), difettosi Widget (colonna B) e Proporzione difettosità (colonna C). La query di database fornisce questi per me e fa il calcolo C = B / A.
Ho una fila totali (a GridFooterItem
Telerik) nella parte inferiore della griglia. Nelle colonne A e B Telerik calcola i totali per le colonne per me. Non possiamo calcolare il valore corretto per l' 'totale' di colonna C da sola colonna C:. dobbiamo popolarlo con (la somma di B) / (la somma di A)
Sono riuscito a fare questo gestendo l'evento DataBound
del RadGrid e popolando manualmente le cellule del piè di pagina. (Ho dovuto prendere il GridFooterItem
in caso ItemCreated
, poi mettere i valori in esso in caso DataBound
, dopo che era calcolati automaticamente i totali per A e B per me.) Questo si sente abbastanza hacky - forse c'è un modo migliore ... ?
In ogni caso, il bit importante è questa:
La mia griglia è suddivisa in gruppi in modo Ho anche bisogno di compilare la colonna C nelle GridGroupFooterItem
s. Non riesco a ottenere la mia tecnica hacky a lavorare in questo caso: Sto trovando la cella di piè di pagina che voglio con myGridFooterItem["WidgetsProduced"]
, ma non riesco a ottenere le cellule gruppo piè di pagina con myGridGroupFooterItem["WidgetsProduced"]
- semplicemente non è un dizionario
Ho provato con myGridGroupFooterItem.Cells[]
, ma questo TableCellCollection
contiene un paio più cellule che mi aspetto, in modo da accedervi da indice intero si sente un po 'ropey (tanto più che si tratta di un rapporto definito dall'utente, in modo che le colonne possono essere in qualsiasi ordine).
Quindi: come faccio a popolare queste cellule con il mio calcolo
?Soluzione
il vostro evento oggetto databound sembra qualcosa di simile
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
}
}
Altri suggerimenti
I ricontrollato se nome univoco indicizzatore funziona con 2 ° trimestre 2009 e 3 ° trimestre 2009 versione di RadGrid per ASP.NET AJAX e ha funzionato sulla mia macchina. Controllare la versione e chiedere più aiuto utilizzando il Telerik forum se necessario.
Dick
Prova questo
In pagina aspx:
<telerik:GridBoundColumn Aggregate="Sum" DataField="Price" DataFormatString="{0:C}" EmptyDataText="0" FooterText="Total :" HeaderText="Price" UniqueName="Price"> ...
(Or)
Nel codice dietro pagina:
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
Bene, se si utilizza la formula su misura per calcolare i risultati, invece di aggregati standard come somma, media e così via, probabilmente dovete contare sulla vostra propria logica. Le cellule dei piè di pagina di gruppo dovrebbero essere indicizzabili dai nome univoco - Mi ricordo che questo non era supportato con le versioni precedenti Telerik ASP.NET griglia, ma questo è stato aggiunto nelle versioni più recenti -. Q2 o Q3 2009
Dick