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

Poner Campo calculado en un grid

Estas en el tema de Poner Campo calculado en un grid en el foro de .NET en Foros del Web. Tengo una Tabla en Sql Server los siguientes campos Nombre Tipo Tamaño --------------------------------- Codigo Integer 2 Nombre nvarchar 20 Und integer 2 CostoPza currency 8 ...
  #1 (permalink)  
Antiguo 05/11/2003, 08:10
 
Fecha de Ingreso: septiembre-2003
Mensajes: 41
Antigüedad: 20 años, 7 meses
Puntos: 0
Poner Campo calculado en un grid

Tengo una Tabla en Sql Server los siguientes campos


Nombre Tipo Tamaño
---------------------------------
Codigo Integer 2
Nombre nvarchar 20
Und integer 2
CostoPza currency 8
Total currency 8 Este es un campo calculado q en la formula le coloco " Und * CostoPza " pero OJO esto dentro de SQL Server. Esto con el Fin de no hacer calculos en VB.NET

Ahora el problema es el siguiente:

Al ingresar la data en el grid y al darle dAdapter.update(ds,"Tabla") me sale un error q dice :

EL CAMPO "Total" NO SE PUEDE MODIFICAR POR SER UN CAMPO CALCULADO.

Que debo hacer q me recomiendan.

La idea de esto es q cada linea q carge el total se autogenere en el grid como lo hagoooo

Gracias
  #2 (permalink)  
Antiguo 05/11/2003, 10:06
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
No te convendría mejor hacer un store procedure(SP) que reciba los valores y el cálulo lo hagas dentro del SP para que despues hagas el insert correspondiente, y el campo Total lo pones como currency sin ponerle ningun tipo de cálculo ya que el SP lo hará internamente.

para mi gusto esa sería una mejor opción no crees..??

Saludos y suerte
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
  #3 (permalink)  
Antiguo 06/11/2003, 15:11
 
Fecha de Ingreso: septiembre-2003
Mensajes: 41
Antigüedad: 20 años, 7 meses
Puntos: 0
Gracias rootk por tu respuesta pero tengo dudas hacerca del uso de los stores procedures, por casualidad no tendras un ejemplo para saber como hacerlo......

Otra cosa no se si tu solucion me refresca los valores del grid dinamicamente, osea, q si yo en tiempo de ejecucion cambio la unidad el total deberia cambiar instantaneamente

Und Costo Total
3 100 300

y al poner otro monto en la unidad q cambia dinamicamente el total como especie de factura, ademas q totalice el grid etc.....

Und Costo Total
5 100 500

Gracias ROOTK
  #4 (permalink)  
Antiguo 06/11/2003, 16:09
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Cita:
no se si tu solucion me refresca los valores del grid dinamicamente
Claro que no hay problema..., si se refrescan los valores.

Es mas... te voy a poner un ejemplo de como usar una funcion dentro de SQL Server y como la mandas a llamar para que te des una mejor idea..

Lo que voy a hacer es la clásica funcion de la suma que toma valores y regresa el resultado

Abres tu SQL Analyser y escribes ésto

Cita:
CREATE Function Suma
( @a int, @b int)
returns int as
Begin
declare @c int

set @c = @a + @b
return @c
End
Y para accesar a ese valor lo puedes hacer de la forma tradicional, tomando en cuenta que hay que ponerlo con la nomenclatura de

NombreBase.propietatio.NombreFuncion
Ejemplo.

Cita:
Dim strSelect As String

strSelect = "select
Cita:
Northwind.dbo.Suma
(12,10) as suma"

Dim oConn As New SqlConnection(ConfigurationSettings.AppSettings("N orthWind"))
Dim cmd As New SqlCommand(strSelect, oConn)

oConn.Open()
Dim r As SqlDataReader = cmd.ExecuteReader

If r.Read Then
Dim res As Integer = CInt(r("Suma"))
Response.Write(res)
End If

r.Close()
oConn.Close()
Y cuando lo ejecutes te devolverá el valor de 120

Con este ejemplo sería cosa de adaptarlo para hacer el cálculo que deseas no crees..??

Como una observacion mas...

Cita:
al darle dAdapter.update(ds,"Tabla")
porque haces el update con un dataset..??? , te recomiendo que lo hagas con un command y le des un execute nonquery para que sea mas rápido y no lo dejes volando un rato en la cache del cliente.

Pero bueno... ya esa sería otra historio, primero prueba con lo que te mande.

Espero que te sirva.

Saludos
  #5 (permalink)  
Antiguo 07/11/2003, 10:10
 
Fecha de Ingreso: septiembre-2003
Mensajes: 41
Antigüedad: 20 años, 7 meses
Puntos: 0
Rootk Funciona Perfectamente Muchas Gracias...........


Tengo q hacer una funcion para cada calculo q tenga q hacer y listooo

En verdad me has solucionado un gran problemita.

Acerca de la Grabacion Tu dices q usando el dataset es muy lento.

Yo creia q esa era la unica forma de Grabar.

Lo q pasa es q estoy muy acostumbrado del recorset en VB6 y no me he adaptado totalmente a esta Tecnologia.

Como me aconsejarias q lo hiciera

como es eso


"te recomiendo que lo hagas con un command y le des un execute nonquery para que sea mas rápido"


Si no hay problema de q me lo expliques con un ejemplito te lo agradezco Gracias.........
  #6 (permalink)  
Antiguo 07/11/2003, 11:17
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Ok.., lo te te puedo recomendar es que cuando utilices algun update, insert y /o delete como no vas a regresar ninguna informacion te recomiendo que lo hagas con un executenonquery

Ejemplo:

Cita:
dim str as String

str = "delete.., update.. etc."

Dim myConnection As New SqlConnection(ConfigurationSettings.AppSettings("c onnectionString"))
Dim myCommand As New SqlCommand(str , myConnection)
e inmediatamente abres la conexion, ejecutas y cierras.

Cita:
myConnection.Open()
myCommand.ExecuteNonQuery()
myConnection.Close()
Y si quieres hacer mas elegante puedes usar un SP le pasas el parámetro y lo ejecutas.

Ahora, en cuanto a

Cita:
Tu dices q usando el dataset es muy lento.
Efectivamente un dataset es un poco mas lento que un command con un datareader, ya que un datareader solo va hacia adelante mientras que en el dataset genera el esquema (esquema XML), el propio XML y luego lo pasa a algun control por ejemplo un datagrid además de que puedes accesar a cualquier registro de la tabla que te hayas traído..sería mas o menos el equivalente al cursor adOpenDynamic de la version anterior de ado.

Claro que no por ésto quiere decir que siempre sea una regla, recuerda que todo depende de lo que estés haciendo.

Espero que te hayas dado una mejor idea.

Saludos
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 16:22.