Foros del Web » Programación para mayores de 30 ;) » .NET »

Columna calculada a la hora de rellenar datagrid

Estas en el tema de Columna calculada a la hora de rellenar datagrid en el foro de .NET en Foros del Web. Hola tengo que rellenar un datagrid con una consulta que viene de Access, pero un campo que es el PVP lo tengo que calcular por ...
  #1 (permalink)  
Antiguo 09/03/2005, 02:30
 
Fecha de Ingreso: marzo-2005
Mensajes: 122
Antigüedad: 19 años, 2 meses
Puntos: 0
Columna calculada a la hora de rellenar datagrid

Hola tengo que rellenar un datagrid con una consulta que viene de Access, pero un campo que es el PVP lo tengo que calcular por cada registro en tiempo de ejecución según los datos que vengan de esa fila.

No sé si puedo poner un enlace en esa columna a un procedimiento que lo vaya ejecutando fila x fila y me ponga ahí el resultado.

O x el contrario tener que ir leyendo registro a registro de la consulta, calcular el pvp y mete todo en una tabla temporal en la base de access y enlazar con esta temporal el datagrid.

En el caso de que se pueda con un procedimiento me podrían poner un ejemplo.

Yo creo que sería mejor método el procedimiento no? debería ser más rápido a la hora de cargar la página.

A ver si me pueden ayudar..
Código:
<Columns>
						<asp:TemplateColumn HeaderText="CÓDIGO">
							<HeaderStyle HorizontalAlign="Center" Width="270px"></HeaderStyle>
							<ItemTemplate>
								<asp:Label id="codigo" runat="server" text='<%# Container.DataItem("codigo") %>' />
							</ItemTemplate>
						</asp:TemplateColumn>
						<asp:TemplateColumn HeaderText="Tipo Establecimiento">
							<HeaderStyle HorizontalAlign="Center" Width="270px"></HeaderStyle>
							<ItemTemplate>
								<asp:Label id="TipoEstablecimiento" runat="server" text='<%# Container.DataItem("nombre") %>' />
							</ItemTemplate>
						</asp:TemplateColumn>
						<asp:TemplateColumn HeaderText="Población">
							<HeaderStyle HorizontalAlign="Center" Width="120px"></HeaderStyle>
							<ItemTemplate>
								<asp:Label id="poblacion" runat="server" text='<%# Container.DataItem("poblacion") %>' />
							</ItemTemplate>
						</asp:TemplateColumn>
						<asp:TemplateColumn HeaderText="Categoría">
							<HeaderStyle HorizontalAlign="Center" Width="120px"></HeaderStyle>
							<ItemTemplate>
								<asp:Label id="categoria" runat="server" text='<%# Container.DataItem("categoria") %>' />
							</ItemTemplate>
						</asp:TemplateColumn>
						<asp:TemplateColumn HeaderText="PVP Total">
							<HeaderStyle HorizontalAlign="Center" Width="120px"></HeaderStyle>
							<ItemTemplate>
								<asp:Label id="pvp" runat="server" text='<%# Container.DataItem("ad") %>' />
							</ItemTemplate>
						</asp:TemplateColumn>
						<asp:TemplateColumn HeaderText="Regimen">
							<HeaderStyle HorizontalAlign="Center" Width="120px"></HeaderStyle>
							<ItemTemplate>
								<asp:Label id="regimen" runat="server" text='Alojamiento' />
							</ItemTemplate>
						</asp:TemplateColumn>
						<asp:TemplateColumn HeaderText="Situación">
							<HeaderStyle HorizontalAlign="Center" Width="120px"></HeaderStyle>
							<ItemTemplate>
								<asp:Label id="situacion" runat="server" text='<%# Container.DataItem("disponibilidad") %>'/>
							</ItemTemplate>
						</asp:TemplateColumn>
						<asp:ButtonColumn Text="RESERVAR" CommandName="reservar"></asp:ButtonColumn>
					</Columns>

Gracias

Última edición por jiglesiasn; 09/03/2005 a las 06:22 Razón: se me olvidaba....
  #2 (permalink)  
Antiguo 09/03/2005, 06:21
Avatar de sindestino  
Fecha de Ingreso: noviembre-2003
Ubicación: xxxx xxxx
Mensajes: 270
Antigüedad: 20 años, 6 meses
Puntos: 0
Para hacer cálculos fila x fila existe un evento de la grilla llamado ItemDataBound que se ejecuta una vez por cada fila de la grilla (incluída la cabecera y el pié de página). Dicho evento puede ser utilizado para calcular subtotales:

e.Item.Cells(4).Text = CInt(e.item.Cells(2).Text) + CInt(e.Item.Cells(3).Text)

Acá estás asignando a la celda 4 la suma de las celdas 2 y 3 de la fila.

Te recomiendo buscar en la documentación. Cualquier duda decinos
  #3 (permalink)  
Antiguo 09/03/2005, 06:28
 
Fecha de Ingreso: marzo-2005
Mensajes: 122
Antigüedad: 19 años, 2 meses
Puntos: 0
calculo en fila de un datagrid

Hola, como haría la llamada desde el grid al evento itemdatabound. Utilizo TemplateColumn.

como haría por ejemplo con la columna PVP de este código para que me haga el calculo de la una columna 2 por otra que se la 3 por ejemplo.
En vez de text='<%# Container.DataItem("AD") %>' /> que tengo que poner?

Un Saludo

Gracias

Código:
<asp:TemplateColumn HeaderText="PVP Total">
							<HeaderStyle HorizontalAlign="Center" Width="120px"></HeaderStyle>
							<ItemTemplate>
								<asp:Label id="pvp" runat="server" text='<%# Container.DataItem("ad") %>' />
							</ItemTemplate>
						</asp:TemplateColumn>

Cita:
Iniciado por sindestino
Para hacer cálculos fila x fila existe un evento de la grilla llamado ItemDataBound que se ejecuta una vez por cada fila de la grilla (incluída la cabecera y el pié de página). Dicho evento puede ser utilizado para calcular subtotales:

e.Item.Cells(4).Text = CInt(e.item.Cells(2).Text) + CInt(e.Item.Cells(3).Text)

Acá estás asignando a la celda 4 la suma de las celdas 2 y 3 de la fila.

Te recomiendo buscar en la documentación. Cualquier duda decinos
  #4 (permalink)  
Antiguo 09/03/2005, 09:10
Avatar de HenrydeSousa  
Fecha de Ingreso: septiembre-2004
Ubicación: Venezuela
Mensajes: 300
Antigüedad: 19 años, 7 meses
Puntos: 2
En c#
private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{

}
En VB
Private Sub GridProductos_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles GridProductos.ItemDataBound

End Sub


mira este link:

http://www.codeproject.com/aspnet/ItemCreated.asp
  #5 (permalink)  
Antiguo 09/03/2005, 09:14
 
Fecha de Ingreso: marzo-2005
Mensajes: 122
Antigüedad: 19 años, 2 meses
Puntos: 0
columna calculada

Ya se. el evento itemdatabound se ejecuta siempre antes de mostrar el datagrid.

Una pregunta.¿ me funcionará si pongo todas las columnas (las que quiero usar para hacer las operaciones) de la consulta en el datagrid ocultas y mostrar solo la del pvp, que es la que quiero que se vea y cuando salte al evento itemdatabound usar las columnas ocultas para hacer operaciones y mostrar el resultado en la del pvp.?

Funcionara.....?


Es que es una consulta de hoteles y segun el nº de adultos, de niños, de las edades de los niños etc. tiene que coger unos valores u otros en la base de datos y operar y cada registro es un hotel y al lado va el pvp total calculado según la búsqueda y los valores de la tabla.

¿Normalmente esto como se hace?
  #6 (permalink)  
Antiguo 09/03/2005, 09:25
Rodolfo Israel
Invitado
 
Mensajes: n/a
Puntos:
Hola por que no haces el calculo desde la consulta ya sea usando un procedimiento almacenado o bien una consulta sql

Si lo que necersitas es el calculo de la Columna2 * Columna3 yo lo haria de la siguiente manera:


Código:
Select Columna1, Columna2, Columna3, Columna2*Columna3 as Resultado
FROM MiTabla
WHERE Criterios
De esta manera estarias haciendo el calculo desde la consulta o bien tu procedimiento almacenado y dejarias el trabajo al motor de bases de datos,
entonces tu codigo quedaria de la siguiente manera:

Código:
text='<%# Container.DataItem("Resultado") %>' />
Espero que esto sea lo que necesites
  #7 (permalink)  
Antiguo 09/03/2005, 09:31
 
Fecha de Ingreso: marzo-2005
Mensajes: 122
Antigüedad: 19 años, 2 meses
Puntos: 0
itemdatabound

No vale por que yo te cuento:

El usuario mete unos datos en la pagina como nº de habitaciones, nº de adultos, nº de niños y edades de los niños y si es Alojamiento, pension completa etc.

Cojo en la base de datos los hoteles que tienen habitaciones libres y tengo que mostrar los datos en un grid y el campo pvp, calcularlo según los valores de la tabla y según los valores que me pusieran en la pagina.
Tengo que hacer todo con
if---end if

si el 1er niño tiene de 0 a 3 años coges una tarifa y le descuentas 20% y eso se lo sumas a la tarifa del adulto x 2 adultos y como es pension completa tengo que coger el campo de pension completa de la tabla para calcularlo..

y todo así. Con lo cual tengo que hacer un procedimiento o llamar la consulta ir calculando registro a registro y meterlo en una tabla temporar con el pvp calculado y lanzar el datagrid con la temporal..




Cita:
Iniciado por Rodolfo Israel
Hola por que no haces el calculo desde la consulta ya sea usando un procedimiento almacenado o bien una consulta sql

Si lo que necersitas es el calculo de la Columna2 * Columna3 yo lo haria de la siguiente manera:


Código:
Select Columna1, Columna2, Columna3, Columna2*Columna3 as Resultado
FROM MiTabla
WHERE Criterios
De esta manera estarias haciendo el calculo desde la consulta o bien tu procedimiento almacenado y dejarias el trabajo al motor de bases de datos,
entonces tu codigo quedaria de la siguiente manera:

Código:
text='<%# Container.DataItem("Resultado") %>' />
Espero que esto sea lo que necesites
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:36.