Principales respuestas
hacer calculos en grilla

Pregunta
-
buenas tardes
amigos del foro si me pueden orientar por favor soy novato lo que prentendo hacer una aplicacion de venta de productos por codigo barrra
codigo para para búsqueda por código barra
vb.net 2015 sql server 2015
Private Sub TxtNombreProducto_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TxtNombreProducto.KeyPress If e.KeyChar = ChrW(13) Then eProducto.Nombre = TxtNombreProducto.Text eProducto.opcion = 1 Dim dt = DirectCast(DgvDetalle.DataSource, DataTable) If dt IsNot Nothing Then dt.Merge(objProducto.BUSCAR_PRODUCTOS_ACTIVOS(eProducto), True) Else DgvDetalle.DataSource = objProducto.BUSCAR_PRODUCTOS_ACTIVOS(eProducto) llamar() EnlazarDetalle() End If TxtNombreProducto.Text = "" TxtNombreProducto.Focus() End If End Sub
lo que hace esto es buscar codigo barra
los productos activo cargarlos a una grilla que llam DvgDetalle
mi problema hacer el calculo pero valla mostrar las cantidades
cundo ingresado productos por codigo
que multiplique los productos que voy ingresado y me muestre el importe en la grilla
formato que le doy
Private Sub EnlazarDetalle() DgvDetalle.Columns(1).DataPropertyName = "Nombre" DgvDetalle.Columns(2).DataPropertyName = "Cantidad" DgvDetalle.Columns(3).DataPropertyName = "Precio" DgvDetalle.Columns(4).DataPropertyName = "Importe" End Sub
- Editado djnilo jueves, 29 de diciembre de 2016 19:04
Respuestas
-
El problema original del hilo es simple en su resolución, ha pasado un día y aún no logras cumplir con los objetivos. Te recomiendo que tomes atención al código propuesto, a las excepciones que recibes y a las recomendaciones que se te ofrecen. El mensaje de la excepción no es difícil de entender, menciona que la columna 'Cantidad' no existe como parte de la colección de columnas, entonces, o realmente no existe o existe pero con otro nombre, como deducirás basta con revisar que columnas existen en la colección.
Si te complica demasiado entonces utiliza el índice de la columna (referir con el índice no es del todo recomendable):
If e.KeyChar = ChrW(13) Then eProducto.Nombre = TxtNombreProducto.Text eProducto.opcion = 1 Dim dt = DirectCast(DgvDetalle.DataSource, DataTable) If dt IsNot Nothing Then Dim Fila As DataRow = dt.Rows.Cast(Of DataRow)(). FirstOrDefault(Function(f) f.Field(Of String)(0) = eProducto.Nombre) If Fila IsNot Nothing Then Fila.SetField(1, Fila.Field(Of Integer)(1) + 1) Fila.SetField(3, Fila.Field(Of Integer)(1) * Fila.Field(Of Decimal)(2)) Else dt.Merge(objProducto.BUSCAR_PRODUCTOS_ACTIVOS(eProducto), True) End If Else DgvDetalle.DataSource = objProducto.BUSCAR_PRODUCTOS_ACTIVOS(eProducto) llamar() EnlazarDetalle() End If TxtNombreProducto.Text = "" TxtNombreProducto.Focus() End If
Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.- Propuesto como respuesta Joyce_ACModerator lunes, 2 de enero de 2017 17:15
- Marcado como respuesta Enrique M. MontejoModerator miércoles, 4 de enero de 2017 10:43
Todas las respuestas
-
-
Puedes tomar el siguiente ejemplo:
If e.KeyChar = ChrW(13) Then eProducto.Nombre = TxtNombreProducto.Text eProducto.opcion = 1 Dim dt = DirectCast(DgvDetalle.DataSource, DataTable) If dt IsNot Nothing Then Dim Fila As DataRow = dt.Rows.Cast(Of DataRow)(). FirstOrDefault(Function(f) f.Field(Of String)("Nombre") = eProducto.Nombre) If Fila IsNot Nothing Then Fila.SetField("Cantidad", Fila.Field(Of Integer)("Cantidad") + 1) Fila.SetField("Importe", Fila.Field(Of Decimal)("Cantidad") * Fila.Field(Of Decimal)("Precio")) Else dt.Merge(objProducto.BUSCAR_PRODUCTOS_ACTIVOS(eProducto), True) End If Else DgvDetalle.DataSource = objProducto.BUSCAR_PRODUCTOS_ACTIVOS(eProducto) llamar() EnlazarDetalle() End If TxtNombreProducto.Text = "" TxtNombreProducto.Focus() End If
La fila recuperada a través de la función BUSCAR_PRODUCTOS_ACTIVOS() debe establecer el valor de 1 en la columna 'Cantidad' y en la columna 'Importe' el mismo valor de la columna 'Precio', la idea es que dichas columnas muestren un valor inicial y no vacío tal como muestras en la imagen.
Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios. -
gracias por responder Williams Morales
debo hacer una busqueda de productos si existe primero y luego aplicar esto que dices tu ?
Consulto
esta es la funcion para buscar un producto en la base datos si existe
pero como la aplico a mi codigo el orden por fa
Public Function Existe(Entidad As CpE_Cls_PRODUCTO) As Boolean Dim Conn As New SqlConnection(Conexion.Connectionstring) Dim Cmd As New SqlCommand Dim Result As Boolean = False Try Conn.Open() Cmd.CommandText = "Select Nombre From producto Where Nombre=@CodigoBarra" Cmd.CommandType = CommandType.Text Cmd.Connection = Conn Cmd.Parameters.Add("@CodigoBarra", SqlDbType.VarChar).Value = Entidad.Nombre Dim reader As SqlDataReader = Cmd.ExecuteReader If reader.HasRows Then Result = True End If reader.Close() Catch ex As Exception Throw New Exception(ex.Message) End Try Return Result End Function
-
Creo que no me hice entender correctamente, mencionaba que tras leer un código se debe validar la existencia del mismo código en la grilla de datos, de existir el código se incrementará la cantidad y modificará el precio (columna Importe) del ítem registrado en la grilla caso contrario se agregará una nueva línea al pedido, el código propuesto hace esas tareas.
El mensaje de error es claro, menciona que no existe la columna 'Cantidad' en el objeto de tipo DataTable. Pon un punto de interrupción en la instrucción 'If Fila IsNot Nothing Then' y lee un código de producto que ya exista en la grilla de datos, al detenerse la ejecución revisa el contenido (columnas) de la variable Fila: Table > Columns > List.
Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios. -
-
-
-
El problema original del hilo es simple en su resolución, ha pasado un día y aún no logras cumplir con los objetivos. Te recomiendo que tomes atención al código propuesto, a las excepciones que recibes y a las recomendaciones que se te ofrecen. El mensaje de la excepción no es difícil de entender, menciona que la columna 'Cantidad' no existe como parte de la colección de columnas, entonces, o realmente no existe o existe pero con otro nombre, como deducirás basta con revisar que columnas existen en la colección.
Si te complica demasiado entonces utiliza el índice de la columna (referir con el índice no es del todo recomendable):
If e.KeyChar = ChrW(13) Then eProducto.Nombre = TxtNombreProducto.Text eProducto.opcion = 1 Dim dt = DirectCast(DgvDetalle.DataSource, DataTable) If dt IsNot Nothing Then Dim Fila As DataRow = dt.Rows.Cast(Of DataRow)(). FirstOrDefault(Function(f) f.Field(Of String)(0) = eProducto.Nombre) If Fila IsNot Nothing Then Fila.SetField(1, Fila.Field(Of Integer)(1) + 1) Fila.SetField(3, Fila.Field(Of Integer)(1) * Fila.Field(Of Decimal)(2)) Else dt.Merge(objProducto.BUSCAR_PRODUCTOS_ACTIVOS(eProducto), True) End If Else DgvDetalle.DataSource = objProducto.BUSCAR_PRODUCTOS_ACTIVOS(eProducto) llamar() EnlazarDetalle() End If TxtNombreProducto.Text = "" TxtNombreProducto.Focus() End If
Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.- Propuesto como respuesta Joyce_ACModerator lunes, 2 de enero de 2017 17:15
- Marcado como respuesta Enrique M. MontejoModerator miércoles, 4 de enero de 2017 10:43
-