reporte pasar net imprimir crear asp.net vb.net datagrid report

asp.net - pasar - Datagrid: calcula el promedio o la suma de la columna en el pie de página



imprimir datagridview vb net (2)

No sé si alguno de ellos es necesariamente mejor, pero dos formas alternativas serían:

  1. Manualmente ejecute la tabla una vez que golpea el pie de página y calcule desde el texto en pantalla
  2. Recupere manualmente los datos y haga el cálculo por separado del enlace

Por supuesto, el # 2 compensa las ventajas del enlace de datos (suponiendo que eso sea lo que estás haciendo).

Tengo una cuadrícula de datos vinculada a un conjunto de datos, y quiero mostrar el resultado promedio en el pie de página de una columna poblada con enteros.

La forma en que me imagino, hay 2 formas en que puedo pensar:

1. "Usa la Fuente , Lucas"
En el código al que estoy llamando DataGrid.DataBind (), use el método DataTable.Compute () ( o en mi caso DataSet.DataTable (0) .Compute () ). Por ejemplo:

Dim strAverage = DataTable.Compute("Avg(ColumnName)", "")

Pero una vez que tengo esto, ¿cómo puedo insertarlo en el pie de página?

2. " Bound for Glory"
Utilizando el evento DataGrid.ItemDataBound y calculando un total acumulado de cada ListItemType.Item y ListItemType.AlternatingItem, finalmente se muestra en ListItemType.Footer. Por ejemplo:

Select Case e.Item.ItemType Case ListItemType.Item, ListItemType.AlternatingItem runningTotal += CInt(e.Item.Cells(2).Text) Case ListItemType.Footer e.Item.Cells(2).Text = runningTotal/DataGrid.Items.Count End Select

Esto simplemente se siente mal, además tendría que asegurarme de que RunningTotal se reinicie en cada DataBind.

¿Hay una mejor manera?


Gracias DannySmurf , tu primera respuesta me hizo ver el sentido. ( ¿Por qué siempre buscamos esa solución mágica? ).

Como referencia, esto es lo que terminé haciendo: ( Advertencia: VB a continuación, puede no contener suficientes puntos y comas )

Case ListItemType.Footer e.Item.Cells(0).Text = "Average" For i As Integer = 3 To 8 Dim runningTotal As Integer = 0 For Each row As DataGridItem In DataGrid.Items If IsNumeric(row.Cells(i).Text) Then runningTotal += CInt(row.Cells(i).Text) End If Next e.Item.Cells(i).Text = Math.Round(runningTotal / DataGrid.Items.Count, 0) Next End Select

Necesitaba hacerlo en varias columnas (por lo tanto, de 3 a 8), en última instancia, por qué estaba buscando la solución mágica.