Agregar campo total a DataGrid en ASP.NET
Autor:Eve Cole
Fecha de actualización:2009-06-30 15:40:15
Una de las preguntas más frecuentes en el foro es: "¿Cómo muestro los totales de las columnas en un DataGrid?". Personalmente he proporcionado código de muestra para esta pregunta muchas veces, por lo que quería proporcionar dicha guía en el título DotNetJunkies. En esta guía, aprenderá cómo contar mediante programación los valores de una columna en DataGrid y mostrar el valor total en el pie de página de DataGrid. Los ejemplos descargables de esta guía incluyen código C# y Visual Basic.NET.
El resultado final de esta guía se verá así:
Como se puede ver en la imagen de arriba:
El DataGrid en la imagen de pantalla utilizada arriba es un DataGrid muy típico. Hay muchas propiedades que controlan la apariencia de DataGrid, que utiliza dos BoundColumns para manipular datos, pero esa no es la más importante. Lo realmente importante para hacer esto bien es utilizar el evento DataGrid.OnItemDataBound. Este evento se activará cada vez que se vincule un registro al DataGrid. Puede crear un controlador de eventos para este evento para manipular el registro de datos. En este caso, obtendrá el valor total de la columna Precio en tiempo de ejecución.
El pie de página se refiere a la última fila del rango de datos. Cuando esta fila está calificada, puede obtener las estadísticas de tiempo de ejecución de la columna Precio durante el procesamiento del evento.
Implementación :
Primero, busquemos una manera de manipular la salida de Web Forms. En este tutorial, utilizará un formulario web (calcTotals.aspx) y un archivo de código de clase (calcTotals.aspx.cs). La intención de esta guía es que el código de clase se compile utilizando un compilador Just-In-Time. Aquí está el código para calcTotals.aspx:
<%@ Página hereda="myApp.calcTotals" Src="20010731T0101.aspx.cs" %>
|
AutoGenerateColumns="Falso" CellPadding="4" CellSpacing="0" BorderStyle="Sólido" BorderWidth="1" Líneas de cuadrícula="Ninguno" BorderColor="Negro" ItemStyle-Font-Name="Verdana" ItemStyle-Font-Size="9pt" HeaderStyle-Font-Name="Verdana" HeaderStyle-Font-Size="10pt" HeaderStyle-Font-Bold="Verdadero" HeaderStyle-ForeColor="Blanco" HeaderStyle-BackColor="Azul" FooterStyle-Font-Name="Verdana" FooterStyle-Font-Size="10pt" FooterStyle-Font-Bold="Verdadero" FooterStyle-ForeColor="Blanco" FooterStyle-BackColor="Azul" OnItemDataBound="MyDataGrid_ItemDataBound" Mostrar pie de página="Verdadero">
|
ItemStyle-HorizontalAlign="Derecha" HeaderStyle-HorizontalAlign="Centro" />
|
En Web Forms se utiliza @Page para declarar directamente el código de clase que hereda la página. El atributo SRC indica que el código de clase se compilará utilizando el compilador JIT. La mayoría de las declaraciones de estilo de código en Web Forms se utilizan para hacer que DataGrid se vea mejor.
Una de las últimas propiedades especificadas es la propiedad OnItemDataBound. Este evento se activará cuando ocurra el evento OnItemDataBound.
El DataGrid (MyGrid) en el formulario web contiene dos BoundColumns, una es Título y la otra es Precio. Aquí se mostrarán las columnas de título y precio de la tabla Títulos en la base de datos Pubs (SQL Server).
Ignorar definiciones de código
El código de clase se utilizará en todas partes. En el código de la clase, puede operar dos eventos: evento Page_Load y evento MyGrid_OnItemDataBound. También existe un método privado CalcTotal, que se puede utilizar para realizar simplemente operaciones matemáticas en estadísticas en tiempo de ejecución.
El comienzo del bloque estructural básico del código de clase:
usando Sistema; usando System.Web; utilizando System.Web.UI; usando System.Web.UI.WebControls; usando System.Web.UI.HtmlControls; usando System.Data; usando System.Data.SqlClient;
espacio de nombres miAplicación { calcTotals de clase pública: Página { DataGrid protegido MyGrid; doble ejecución privadaTotal = 0; } } |
En la estructura básica del código de clase, debe utilizar las declaraciones relevantes para importar el espacio de nombres (espacio de nombres). En la declaración de clase, declara dos variables, una es la variable que asigna el control DataGrid (MyGrid) del formulario web en el código de clase y la otra es el valor de precisión doble utilizado para operar las estadísticas de tiempo de ejecución en la columna Precio de DataGrid; .
Evento de carga de página
En el evento Page_Load, todo lo que tiene que hacer es conectarse a SQL Server y ejecutar un SqlCommand simple. Ha obtenido todos los datos de títulos y precios con Valor de precio > 0. Utilice el método SqlCommand.ExecuteReader para devolver un SqlDataReader y vincularlo directamente al DataGrid (MyGrid).
Page_Load vacío protegido (remitente del objeto, EventArgs e) { SqlConnection myConnection = new SqlConnection("server=Localhost;database=pubs;uid=sa;pwd=;");//Crear conexión SQL SqlCommand myCommand = new SqlCommand("SELECCIONAR título, precio DESDE Títulos DONDE precio > 0", myConnection );//Crear comando SQL
intentar { myConnection.Open();//Abra la conexión de la base de datos MyGrid.DataSource = myCommand.ExecuteReader();//Especifique la fuente de datos de DataGrid MyGrid.DataBind();//Vincular datos a DataGrid myConnection.Close();//Cerrar la conexión de datos} captura (Excepción ex) { //Detecta el error HttpContext.Current.Response.Write(ex.ToString()); } } |
Método CalcTotals
El método CalcTotals se utiliza para manejar la variable runningTotal. Este valor se pasará como una cadena. Debe analizarlo como un doble y luego la variable runningTotal se convierte en un doble.
CalcTotal vacío privado (cadena _precio) { intentar { total en ejecución += Double.Parse(_price); } atrapar { //captura de error} } |
Evento MyGrid_ItemDataBound
El evento MyGrid_ItemDataBound se llama cuando cada fila de la fuente de datos está vinculada a DataGrid. En este controlador de eventos, puede procesar cada fila de datos. Para sus propósitos aquí, deberá llamar al método CalcTotals y pasar el texto de la columna Precio y formatear la columna Precio de cada fila con una cantidad y mostrar el valor total acumulado en la fila del pie de página.
public void MyDataGrid_ItemDataBound (remitente del objeto, DataGridItemEventArgs e) { if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { CalcTotal(e.Item.Cells[1].Texto); e.Item.Cells[1].Text = string.Format("{0:c}", Convert.ToDouble(e.Item.Cells[1].Text)); } de lo contrario si (e.Item.ItemType == ListItemType.Footer) { e.Item.Cells[0].Text="Total"; e.Item.Cells[1].Text = string.Format("{0:c}", runningTotal); } } |
En el controlador de eventos MyGrid_ItemDataBound, primero debe usar ListItemType para determinar si el DataGridItem actual es un elemento de datos o una fila de AlternatingItem. Para los elementos de datos, llame a CalcTotals y le pase el valor de la columna Precio como parámetro; luego, formatee y coloree la columna Precio en formato de cantidad;
Si DataGridItem es un pie de página, runningTotal se puede mostrar en formato de cantidad.
Resumir
En esta guía, aprendió a utilizar el evento DataGrid.OnItemDataBound para realizar estadísticas en tiempo de ejecución en una columna DataGrid. Con este evento, puede crear un total de columna y colorear el pie de página de una fila de DataGrid.