Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Calculos con Columnas de Plantillas en ASP.NET

313 views
Skip to first unread message

NRB

unread,
Nov 27, 2006, 6:02:16 PM11/27/06
to
Hola!!

Como puedo realizar Calculos con Columnas de Plantillas en ASP.NET? En
tiempo de edición el DataGrid genera 4 columnas con cajas de texto,
necesito sumar las 3 primeras y presentar el resultado en la 4ta. sin
presionar ningun boton, debe evaluar que el dato ingresado en las cajas
d texto sean números y que el resultado de la sumatoria en la 4ta caja
de texto sea menor que 50...

Gracias!!!

Jose A. Fernandez

unread,
Nov 27, 2006, 11:47:06 PM11/27/06
to
Hola NRB
Cuando dices "sin presionar nunguna boton" quieres decir que estas por
cargar en los textbox de las 3 primeras columnas y la suma la realiza
en ese mismo momento? o sea las tres primeras columnas no tiene datos
enlazados (a alguna base de datos por ejemplo?)

Si esto es asi la respuesta es sumar del lado del cliente, y alli
tenemos a nuestro alcance nada mas ni nada menos que Javascript... es
decir tendras que armar esa fila con las llamadas a funciones js
adecuadas que sume todas las de la fila en cuestion
Mira este ejemplo:
http://www.js-examples.com/page/javascripts__example.html?run=497
Aqui tienes 4 textbox que en el evento onChange tiene una llama a una
funcion js
http://www.js-examples.com/page/javascripts__example.html?view=497
(aqui esta el codigo de ejemplo)

Podrias retocarlo para que sume los textbox de la fila
Aqui esta el codigo....:
function soma(){
var vtemp=0
vresult=0
for (var i=1;i<5;i++){ // loop to get all inputs
vtemp=eval("parseFloat(document.all.box"+i+".value)")
// if value is a number - add it.
if(!isNaN(vtemp)) vresult+=vtemp
}
// change the last input...Result one
document.all.result.value=vresult
}

Bueno para que sea por fila tendrias que hacer algo asi:
function SumarFila(nroFila, ctrl1, ctrl2, ctrl3, ctrlTotal){
var vtemp=0

vtemp=eval("parseFloat(document.getElementById(ctrl1).value)");
if(!isNaN(vtemp)) vtemp+=vtemp

vtemp=eval("parseFloat(document.getElementById(ctrl2).value)");
if(!isNaN(vtemp)) vtemp+=vtemp

vtemp=eval("parseFloat(document.getElementById(ctrl3).value)");
if(!isNaN(vtemp)) vtemp+=vtemp

document.getElementById(ctrlTotal).value = vtemp

}

Ahora bien luego este super algoritmo (si te daras cuenta es muy
basico)
Tendraas que colocar en cada textbox de tu columna la llamanda a esta
funcion SumarFila(...) en el evento onChange
como?
El Datagrid tiene un evento ItemDataBound (y en asp.net 2.0 con el
control GridView el evento que se corresponde es RowDataBound) bueno
aqui puedes manipular cuando los datos de tu DB estan siendo
enlazados.......UPS Pero ahora que estoy recordando TU NO TIENES ESTE
ENLACE... tendras que hacer en el evento que se corresponde con la
creacion del la fila (no recuerdo cual, creo que RowCreated en Gridview
e ItemCreated en el Datagrid)

Supongamos que es en el evento RowDataBound, que es el que recuerdo
para escribilo sin intellisense :)....

Sub tuGrilla_RowDataBound(ByVal sender As Object, ByVal e As
GridViewRowEventArgs)

If e.Row.RowType = DataControlRowType.DataRow Then

Dim txt1 as Textbox = Ctype(e.Row.FindControl("txt1"), Texbox)
Dim txt2 as Textbox = Ctype(e.Row.FindControl("txt2"), Texbox)
Dim txt3 as Textbox = Ctype(e.Row.FindControl("txt3"), Texbox)
Dim txtTotal as Textbox = Ctype(e.Row.FindControl("txtTotal"),
Texbox)

Dim cadenaParam as new Text.StringBuilder
cadenaParam.Append("SumarFila(")
cadenaParam.Append(e.Row.RowIndex & ", ")
cadenaParam.Append(txt1.ClientId & ", ")
cadenaParam.Append(txt2.ClientId & ", ")
cadenaParam.Append(txt3.ClientId & ", ")
cadenaParam.Append(txtTotal.ClientId & ");")


txt1.Atributtes.Add("onChange", cadenaParam.ToString)
txt2.Atributtes.Add("onChange", cadenaParam.ToString)
txt3.Atributtes.Add("onChange", cadenaParam.ToString)

End If

End Sub

La idea de base esta creo....luego deberas colocar los "condimentos
necesarios" para evaluar que la sumatoria no sea mas de 50.. en todo
caso esto podrias hacerlo con codigo del lado del cliente tambien en el
momento de la suma o avisando con controles de validacion que te
proporciona asp.net

Espero que te sirva de ayuda o guia

Enlaces:
---------------
DataGrid.ItemDataBound (Evento)
Se produce después del enlace de datos de un elemento al control
DataGrid.
http://msdn2.microsoft.com/es-es/library/system.web.ui.webcontrols.datagrid.itemdatabound(VS.80).aspx

GridView.RowDataBound (Evento)
Se produce cuando una fila de datos se enlaza a los datos de un control
GridView.
http://msdn2.microsoft.com/es-es/library/system.web.ui.webcontrols.gridview.rowdatabound(VS.80).aspx

DataGrid.ItemCreated (Evento)
Se produce en el servidor cuando se crea un elemento en el control
DataGrid.
http://msdn2.microsoft.com/es-es/library/system.web.ui.webcontrols.datagrid.itemcreated(VS.80).aspx

GridView.RowCreated (Evento)
Se produce cuando se crea una fila en un control GridView.
http://msdn2.microsoft.com/es-es/library/system.web.ui.webcontrols.gridview.rowcreated(VS.80).aspx


________________________
Jose A. Fernandez

NRB ha escrito:

0 new messages