células calculados en GridGroupFooterItem de Telerik RadGrid
Pregunta
Estoy llenar una Telerik RadGrid con datos de un DataTable (System.Data.DataTable
). Como estoy apoyando la aplicación de otra persona, no puedo usar cualquier otra fuente de datos de control o la pantalla.
En mi rejilla tengo tres columnas: digamos que son Reproductores Producido (columna A), Reproductores defectuosos (columna B) y Proporción faultiness (columna C). La consulta de base de datos proporciona estos para mí y hace el cálculo C = B / A.
Tengo una línea de totales (a GridFooterItem
Telerik) en la parte inferior de la rejilla. En las columnas A y B Telerik calcula los totales de las columnas para mí. No podemos calcular el valor correcto para el 'total' de la columna C de la sola columna C:. Tenemos que rellenarla con (la suma de B) / (la suma de A)
Me las he arreglado para hacer esto mediante la manipulación del evento DataBound
del RadGrid y llenar manualmente las células en el pie de página. (Tuve que coger el GridFooterItem
en caso ItemCreated
, a continuación, poner los valores en ella en caso DataBound
, después de que se había calculado automáticamente los totales de A y B para mí.) Esto se siente bastante hacky - tal vez hay una mejor manera ... ?
De todos modos, la parte importante es la siguiente:
Mi rejilla se divide en grupos por lo que también es necesario para rellenar la columna C en los GridGroupFooterItem
s. No puedo conseguir mi técnica hacky para trabajar en este caso: Estoy encontrando la celda de pie que quiera con myGridFooterItem["WidgetsProduced"]
, pero no puedo lograr que las células del grupo de pie de página con myGridGroupFooterItem["WidgetsProduced"]
- simplemente no es un diccionario
He intentado usar myGridGroupFooterItem.Cells[]
, pero esto TableCellCollection
contiene un par más células de las que cabe esperar, por lo que accede a ellos por el índice de número entero se siente un poco chungo (especialmente ya que este es un informe definido por el usuario, por lo que las columnas pueden ser en cualquier orden).
Así que: ¿cómo lo pueblan estas células con mi cálculo
?Solución
su evento elemento de enlace de datos se ve algo como
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
}
}
Otros consejos
Me doble comprobado si nombre único indexador trabaja con Q2 y Q3 2009 2009 versión de RadGrid para ASP.NET AJAX y funcionó en mi máquina. Para comprobar la versión y pedir más ayuda sobre cómo utilizar el foros Telerik si es necesario.
Dick
Probar
En la página Aspx:
<telerik:GridBoundColumn Aggregate="Sum" DataField="Price" DataFormatString="{0:C}" EmptyDataText="0" FooterText="Total :" HeaderText="Price" UniqueName="Price"> ...
(O)
En código detrás de la página:
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
Bueno, si usted usa fórmula personalizada para calcular los resultados en lugar de los agregados estándar como suma, promedio y así sucesivamente, es probable que tenga que confiar en su propia lógica. Las células de los pies de grupo deben ser indexable por nombre exclusivo - Recuerdo esto no fue apoyado con versiones anteriores Telerik ASP.NET parrilla, pero esto se añadió en versiones más recientes -. Q2 o Q3 2009
Dick