Visual Basic.NET - Combobox SQL Seleccionar

 
Vista:
Imágen de perfil de Anibal

Combobox SQL Seleccionar

Publicado por Anibal (21 intervenciones) el 11/10/2021 21:18:19
Saludos mis estimados, remito ante ustedes mi siguiente consulta, bien sabre agradecer sus buenos oficios al respecto:
Cargo un combobox con la descripción de productos por medio de un procedimiento almacenado

ALTER PROC [dbo].[pa_ListarProductos]
AS
SELECT cod_producto, des_producto, costo_porunidad,existencia_unidad
FROM tbProductos
ORDER BY des_producto

en mi aplicación quisiera que al hacer clic en la descripción me seleccione el costo por unidad y lo traslade a un campo de texto

Agradecido
Bendiciones
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Combobox SQL Seleccionar

Publicado por Phil Rob (1554 intervenciones) el 12/10/2021 12:02:37
Hola,

Cuando cargas un ComboBox con el resultado de una consulta, supongo que utilizar un DataAdapter para ejecutar esta consulta y lleanr un DataTable (por ejemplo, DT es la DataTable).
Para dar los datos al ComboBox, escribes :

ComboBox.DataSource = DT
ComboBox.DisplayMember = "des_producto"
' o cod_producto

Si añades la linea :

ComboBox.ValueMember = "costo_porunidad"

Entonces, en el evento ComboBox1_SelectedIndexChanged(... ), puedes escribir : TextBox1.Text = ComboBox1.SelectedValue.

No he pruebo este ejemplo. Si no funciona, envia tu codigo.

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Anibal

Combobox SQL Seleccionar

Publicado por Anibal (21 intervenciones) el 13/10/2021 12:11:17
Muchas gracias por tu tiempo Phil, exactamente asi lo cargo!
y tu ejemplo funciona muy bien, solo que yo capturo en Combobox.ValueMember el código del producto para con dicho código actualizar la existencia del mismo
mi código:

acá genero lo consulta en el DataAdapter


'Función que lista los Productos Para las busquedas rapidas
Public Function ListaProductos() As DataSet

Dim Consulta As New DataSet

cn = objConectar.Conectar
cmdsql = New SqlDataAdapter("pa_ListarProductos", cn)
cmdsql.Fill(Consulta, "ListProductos")

Return Consulta

'cierro los objetos
Consulta.Dispose()
cmdsql.Dispose()
cn.Dispose()

End Function

acá cargo el combo con los datos de la consulta

Private Sub CargaComboProductos()

CmbProducto.DataSource = CPNegocio.ListaProductos.Tables("ListProductos")
CmbProducto.DisplayMember = "des_producto"
CmbProducto.ValueMember = "cod_producto"

End Sub

acá capturo el código del producto para efecto de la actualización de la existencia

Private Function CapCodProducto() As Integer
Return CmbProducto.SelectedValue
End Function

En este caso, necesito tener el cod_producto para al momento de guardar la relación de entrada de mercancía relacione al producto
pero también y es mi consulta me gustaría que al seleccionar el producto de la consulta del combo lograse captar el precio del producto seleccionado


.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Combobox SQL Seleccionar

Publicado por Phil Rob (1554 intervenciones) el 13/10/2021 14:23:24
Hola,

Me parece que este costo_porunidad que debe ser escrito en el codigo para cargar el ComboBox :

CmbProducto.ValueMember = "costo_porunidad"

En la propiedad DisplayMember, este debe ser des_producto o cod_producto, este quieres mostrar.

En tu código, la selección de un "Item" del ComboBox da el cod_producto en el ValueMember, no el costo_porunidad.

Sobre la Function CapCodProducto() , me parece mejor de escribir estas líneas de códigos en el procedimiento SelectedIndexChanged del ComboxBox.

Quizá no comprendo bien este quieres ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Anibal

Combobox SQL Seleccionar

Publicado por Anibal (21 intervenciones) el 13/10/2021 14:47:59
Ok Phil, creo que no me explicado bien, reformularé mi consulta:

Si teniendo un ComboBox, asociado a una consulta de una tabla de productos, (cod_producto, des_producnto, costo_porunidad, existencia)
En dicho ComboBox tengo la propiedad DisplayMember direccionada a "des_producto", de manera que al desplegar la lista se pueda indentificar por nombre los items que componen la consulta.

Private Sub CargaComboProductos()

CmbProducto.DataSource = CPNegocio.ListaProductos.Tables("ListProductos")
CmbProducto.DisplayMember = "des_producto"
CmbProducto.ValueMember = "cod_producto"

End Sub

Al seleccionar un producto, me pueda mostrar en un textbox el costo_porunidad, en el codigo que ves allí arriba asigno la propiedad ValueMember al cod_producto porque necesito guardar el codigo del producto al registrar la carga de la existencia, y no se como capturarlo de otra manera,..

es decir, como capturar el cod_producto y el costo_porunidad del item que se seleccione en el combobox

o si cambio la propiedad ValueMember = "costo_porunidad" como obtener el cod_producto para guardarlo
gracias una vez mas por tu tiempo
mil excusas
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Combobox SQL Seleccionar

Publicado por Phil Rob (1554 intervenciones) el 13/10/2021 15:01:58
Sí. Comprendo que tienes muchos datos sobre un producto y el CombBox muestra des_producto. Cuando seleccionas un des_producto, muestras costo_porunidad en un TextBox. Tu pregunta es como también tener el cod_producto del producto seleccionado.

Debes trabajar con el DataTable CPNegocio.ListaProductos.Tables("ListProductos"). El, sabe todas informaciones.
Espero tener el tiempo de hacer un ejemplo ... Debo ya lo tener en francés, debo lo buscar y lo traducir.

...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Combobox SQL Seleccionar

Publicado por Phil Rob (1554 intervenciones) el 13/10/2021 17:20:47
Continuacion ....

Si agregas el código siguiente en mi programa, obtienes una herramienta en mas :

1
2
3
4
5
6
7
8
Private Sub CBTest_Leave(sender As Object, e As EventArgs) Handles CBTest.Leave
        If Not CargaArticleCompleta Then
            Exit Sub
        End If
        ' El DataTable sabe siempre todos datos del row seleccionada
        ' Pero, solamente cuando una cambiada es completa. Asi, para el Combo, es necesarion de haber dejar el Combo
        MessageBox.Show(MisDatos.Tables(NombreTablaEnDB).Rows(Me.BindingContext(MisDatos.Tables(NombreTablaEnDB)).Position).Item("Id"))
    End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Anibal

Combobox SQL Seleccionar

Publicado por Anibal (21 intervenciones) el 14/10/2021 04:06:31
Saludos Phil, agradecido por tu tiempo,
logré bajar el ejemplo muy ilustrativo gracias,
ajusté algunas cosas en mi proyecto pero me da error,
estoy adjuntando el proyecto a ver si lo logras ver analizar y aportarme

en la imagen esta el error

error_binding
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Combobox SQL Seleccionar

Publicado por Phil Rob (1554 intervenciones) el 14/10/2021 08:00:30
Hola,

Los Bindings deben ser escritos donde escribes los parámetros del ComboBox.
Mira mi código, todos estos detalles están escritos en un mismo procedimiento, el procedimiento "MostrarDatos".

DataBindings.Add debe ser al mismo nivel que la escritura de DataSource.
Si has escrito el DataBindings.Add para el TextBox CostoUnitario y el campo Costo_unidad, no es mas necesario de escribir en el procedimiento CmdProducto_SelectedIndexChanged. Este procedimiento puede ser vacía, puede ser quitado. El mostrado es automatico.

Para obtener un valor de un campo que no es en el ComboBox, escribo el código en el evento Leave. lo se ejecute solamente cuando el ComboBox es dejado, por ejemplo cuando ti "Click" el botón "Registrar las cambiadas". Este es el momento donde el cod_producto es necesario.

Revisa mi codigo :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
Private Sub MostrarDatos()
 
        For Each C As Control In Me.Controls  ' Para muchas pruebas, es necesario de borrar anticas enlaces
            Try
                C.DataBindings.Clear()
            Catch
            End Try
        Next
 
        ' DataGridView
        DGVTest.VirtualMode = True
        DGVTest.DataSource = MisDatos.Tables(NombreTablaEnDB)
 
        ' ComboBox
        CBTest.DataSource = MisDatos.Tables(NombreTablaEnDB)
        CBTest.DisplayMember = "Article"
        CBTest.ValueMember = "Stock"
 
 
        ' TextBox  !!! con este metodo, los TextBox siempre contienen los valores actuales
        '              el Sub CBTest_SelectedIndexChanged siguiente puede ser isolada
        TBDisplayCombo.DataBindings.Add("Text", MisDatos.Tables(NombreTablaEnDB), "Article")
        TBValueCombo.DataBindings.Add("Text", MisDatos.Tables(NombreTablaEnDB), "Stock")
        TBIdProducto.DataBindings.Add("Text", MisDatos.Tables(NombreTablaEnDB), "Id")
 
        CargaArticleCompleta = True
 
    End Sub
 
    'Private Sub CBTest_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles CBTest.SelectedIndexChanged
    '    '    If Not CargaArticleCompleta Then   ' *******   TODO COMENTARIO ***********
    '    '        Exit Sub
    '    '    End If
    '    '    TBDisplayCombo.Text = CBTest.Text
    '    '    TBValueCombo.Text = CBTest.SelectedValue
    '    '   MisDatos.Tables(NombreTablaEnDB).RejectChanges()
    'End Sub
 
    Private Sub CBTest_Leave(sender As Object, e As EventArgs) Handles CBTest.Leave
        If Not CargaArticleCompleta Then
            Exit Sub                                            ' ********   AQUI EL ID ES NECESARIO *****************
        End If
        ' El DataTable sabe siempre todos datos del row seleccionada
        ' Pero, solamente cuando una cambiada es completa. Asi, para el Combo, es necesario de haber dejar el Combo
        MessageBox.Show(MisDatos.Tables(NombreTablaEnDB).Rows(Me.BindingContext(MisDatos.Tables(NombreTablaEnDB)).Position).Item("Id"))
    End Sub

Tendré un poco tiempo en la tarde.

Espero que este te ayudará ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de Anibal

Combobox SQL Seleccionar

Publicado por Anibal (21 intervenciones) el 14/10/2021 13:28:29
Saludos Phil, nuevamente agradezco tu tiempo y dedicación a querer ayudar, orientar gracias
hice las recomendaciones que me indicas
este es el espacio donde cargo el combo cmbProductos
Private Sub CargaComboProductos()
For Each C As Control In Me.Controls ' Para muchas pruebas, es necesario de borrar anticas enlaces
Try
C.DataBindings.Clear()
Catch
End Try
Next
CmbProducto.DataSource = CPNegocio.ListaProductos.Tables("ListProductos")
CmbProducto.DisplayMember = "des_producto"
CmbProducto.ValueMember = "costo_porunidad"

TxtCostoUnitario.DataBindings.Add("Text", CPNegocio.ListaProductos.Tables("listProductos"), "costo_porunidad")
TxtNroDocumento.DataBindings.Add("Text", CPNegocio.ListaProductos.Tables("listProductos"), "cod_producto")

End Sub

Correcto se eliminó el error con los Bindings, pero no cambia el valor al cambiar de Item o de producto
tu me dices que ello es automatico pues en mi caso no lo hace se queda en el primero de la lista del combo,


error_proyectovisual
error_proyectovisual1
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Combobox SQL Seleccionar

Publicado por Phil Rob (1554 intervenciones) el 14/10/2021 15:59:21
Tu código parece me bien. No comprendo el problema

He cambiado muyo para quitar el DataGridView, para ser seguro que no da influencia.

He ejecutado mi código y hecho el video. Vea : https://www.dropbox.com/s/l7zkldmxxxsyu0o/Anibal2.mp4?dl=0

El MessageBox que viene es dado por el procedimiento Leave cuando dejo el ComboBox. El Id mostrado es correcto.

Debes ser seguro que el ComboBox tiene todos sus parámetros por defecto, ningún parámetro cambiado en el cuadro de Propiedades.
También a ver que no existe otro procedimiento del ComboBox que pueden se activar.

Te propongo de enviar me los códigos de los procedimientos que cargan los datos, mejor todos los códigos del Form que muestras en tu mensaje.

...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de Anibal

Combobox SQL Seleccionar

Publicado por Anibal (21 intervenciones) el 14/10/2021 19:31:36
Saludos Phil alli te expongo a continuación todo el codigo que corresponde al formulario

Imports System.Windows.Forms
Imports CapaNegocio
Imports CapaEntidades
Public Class FrmRecepProducto
Dim CPNegocios As New CNProveedores
Dim CPNegocio As New CNProductos
Dim CPNegocioItem As New CNTempRecep
Dim CPNegocioRecep As New CNRecepcion
Dim CPNegocioDetRecep As New CNDetalleRecepcion
Dim NroItem As Integer
Dim ExistProd As Integer
Dim NvaExistencia As Integer
Private Sub FrmRecepProducto_Load(sender As Object, e As EventArgs) Handles MyBase.Load

TxtFecha.Text = Date.Now.ToString("g")
TxtCodigo.Text = CPNegocioRecep.NuevRegEntrada
Call CargaComboProveedores()
Call CargaComboProductos()
Call CargaComboLotes()
Call CargaComboTipoDoc()
Call SetupGridDetalleItems()
For Each C As Control In Me.Controls ' Para muchas pruebas, es necesario de borrar anticas enlaces
Try
C.DataBindings.Clear()
Catch
End Try
Next

End Sub
Private Sub CargaComboProveedores()

CmbProvee.DataSource = CPNegocios.ListaProveedores.Tables("ListProveedores")
CmbProvee.DisplayMember = "nom_proveedor"
CmbProvee.ValueMember = "cod_proveedor"

End Sub
Private Sub CargaComboProductos()
For Each C As Control In Me.Controls ' Para muchas pruebas, es necesario de borrar anticas enlaces
Try
C.DataBindings.Clear()
Catch
End Try
Next
CmbProducto.DataSource = CPNegocio.ListaProductos.Tables("ListProductos")
CmbProducto.DisplayMember = "des_producto"
CmbProducto.ValueMember = "costo_porunidad"

TxtCostoUnitario.DataBindings.Add("Text", CPNegocio.ListaProductos.Tables("listProductos"), "costo_porunidad")
TxtNroDocumento.DataBindings.Add("Text", CPNegocio.ListaProductos.Tables("listProductos"), "cod_producto")

End Sub
Private Sub CargaComboLotes()
CmbLotes.DataSource = CPNegocio.CargaComboLotes.Tables("Lotes")
CmbLotes.DisplayMember = "num_lote"
CmbLotes.ValueMember = "cod_lote"
End Sub
Private Sub CargaComboTipoDoc()

CmbTipoRecepcion.DataSource = CPNegocioRecep.CargaComboTipoEntrada.Tables("TipoEntrada")
CmbTipoRecepcion.DisplayMember = "des_tipodoc"
CmbTipoRecepcion.ValueMember = "cod_tipodoc"

End Sub

Private Sub BtnListarProvee_Click(sender As Object, e As EventArgs) Handles BtnListarProvee.Click
Dim listaProveedores As New FrmListaProveedores
If listaProveedores.ShowDialog(Me) = Windows.Forms.DialogResult.OK Then
Me.CmbProvee.Text = listaProveedores.TxtBuscar.Text
'frmDetalle.Dispose()
End If
End Sub

Private Sub BtnMaeProvee_Click(sender As Object, e As EventArgs) Handles BtnMaeProvee.Click
FrmProveedores.ShowDialog()
End Sub

Private Sub BtnListaProductos_Click(sender As Object, e As EventArgs) Handles BtnListaProductos.Click
Dim listaProductos As New FrmListaProductos
If listaProductos.ShowDialog(Me) = Windows.Forms.DialogResult.OK Then

Me.TxtCostoUnitario.Text = listaProductos.TxtCostoProducto.Text
Me.CmbProducto.Text = listaProductos.TxtBuscar.Text
ExistProd = Val(listaProductos.TxtExistencia.Text)
'frmDetalle.Dispose()
End If
End Sub

Private Sub BtnAgregar_Click(sender As Object, e As EventArgs) Handles BtnAgregar.Click
If TxtCantidadItem.Text <> String.Empty Then
Dim ObjetoAgregar As New CETemprecep
Dim Total As Double = 0
Dim iTotal As Integer = Me.DGDetalleItem.Rows.Count

ObjetoAgregar.CodItem = CapNroItem()
ObjetoAgregar.CodProducto = CapCodProducto()
ObjetoAgregar.CodLoteItem = CapCodLote()
ObjetoAgregar.CantidadItem = CapCantidad()
NvaExistencia = ExistProd + CapCantidad()
ObjetoAgregar.NuevaExistencia = NvaExistencia
ObjetoAgregar.PrecioUni = CapCostoUni()
ObjetoAgregar.TotalItem = CapTotalItem()

CPNegocioItem.AgregarNuevoItem(ObjetoAgregar)

DGDetalleItem.DataSource = CPNegocioItem.ListarItemsTemp.Tables("TempItems")
For Each Col As DataGridViewRow In DGDetalleItem.Rows
Total += Val(Col.Cells(6).Value)
Next
TxtTotalDoc.Text = Total.ToString("#.##0,00")
TxtSubTotal.Text = Total.ToString("#.##0,00")
'DGDetalleItem.DataMember = "Consulta"
Else
MsgBox("Verifique Cantidad!!!", MsgBoxStyle.Information, "SistemFarm")
TxtCantidadItem.Focus()
End If
End Sub
Private Function CapCodProducto() As Integer
Return CmbProducto.SelectedValue
End Function
Private Function CapCodLote() As Integer
Return CmbLotes.SelectedValue
End Function
Private Function CapCantidad() As Integer
Return TxtCantidadItem.Text
End Function
Private Function CapCostoUni() As Decimal
Return TxtCostoUnitario.Text
End Function
Private Function CapTotalItem() As Decimal
Return TxtTotalCosto.Text
End Function
Private Function CapNroItem() As Integer
Return CPNegocioItem.NuevoItem
End Function

Private Sub TxtCantidadItem_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TxtCantidadItem.KeyPress
If Char.IsNumber(e.KeyChar) Or Char.IsControl(e.KeyChar) Then
e.Handled = False
Else
e.Handled = True
End If
End Sub

Private Sub DGDetalleItem_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles DGDetalleItem.CellContentClick
NroItem = DGDetalleItem.CurrentRow.Cells(0).Value
End Sub

Private Sub BtnQuitaItem_Click(sender As Object, e As EventArgs) Handles BtnQuitaItem.Click
Dim ObjEliminar As New CETemprecep
Dim Total As Double = 0
Dim iTotal As Integer = DGDetalleItem.Rows.Count
Dim NroItemSelec As Integer = NroItem

ObjEliminar.CodItem = NroItemSelec

CPNegocioItem.EliminaItem(ObjEliminar)

DGDetalleItem.DataSource = CPNegocioItem.ListarItemsTemp.Tables("TempItems")
For Each Col As DataGridViewRow In DGDetalleItem.Rows
Total += Val(Col.Cells(6).Value)
Next
TxtTotalDoc.Text = Total.ToString("#.##0,00")
TxtSubTotal.Text = Total.ToString("#.##0,00")

End Sub

Private Sub BtnAceptar_Click(sender As Object, e As EventArgs) Handles BtnAceptar.Click
TxtImpuesto.Text = 0
Dim ObjAgregar As New CERecepcion

ObjAgregar.CodEntrada = CodEntrada()
ObjAgregar.FechaHoraEntrada = FechaHoraEntrada()
ObjAgregar.CodTipoDoc = TipoRecepcion()
ObjAgregar.CodProveedor = CodProveedor()
ObjAgregar.NroDoc = NroDoc()
ObjAgregar.FechaDoc = FechaDoc()
ObjAgregar.SubTotalDoc = SubTotalDoc()
ObjAgregar.ImpuestoDoc = ImpuestoDoc()
ObjAgregar.TotalDoc = TotalDoc()
ObjAgregar.StaDoc = StaDoc()

CPNegocioRecep.AgregaEntrada(ObjAgregar)

'agregare el detalle a la tabla detalle
Dim Total As Double = 0
Dim iTotal As Integer = Me.DGDetalleItem.Rows.Count
Dim ObjAgrDeta As New CEDetalleRecepcion

For i = 0 To iTotal Step 1
If i <> iTotal Then
ObjAgrDeta.CodEntrada = TxtCodigo.Text
ObjAgrDeta.NroItem = DGDetalleItem.Rows.Item(i).Cells(0).Value
ObjAgrDeta.DesProducto = DGDetalleItem.Rows.Item(i).Cells(1).Value
ObjAgrDeta.NroLote = DGDetalleItem.Rows.Item(i).Cells(2).Value
ObjAgrDeta.CantItem = DGDetalleItem.Rows.Item(i).Cells(4).Value
ObjAgrDeta.CostoItem = DGDetalleItem.Rows.Item(i).Cells(5).Value
ObjAgrDeta.ImpustoItem = 0.00
ObjAgrDeta.TotalItem = DGDetalleItem.Rows.Item(i).Cells(6).Value
ObjAgrDeta.StaDoc = StaDoc()

CPNegocio.ActualizaExistencia(DGDetalleItem.Rows.Item(i).Cells(7).Value, DGDetalleItem.Rows.Item(i).Cells(8).Value)

CPNegocioDetRecep.AgregarDetalleEntrada(ObjAgrDeta)
CPNegocioItem.LimpiarItemsTemp()
Else
DGDetalleItem.DataSource = CPNegocioItem.ListarItemsTemp.Tables("TempItems")
For Each Col As DataGridViewRow In DGDetalleItem.Rows
Total += Val(Col.Cells(6).Value)
Next

TxtTotalDoc.Text = Total.ToString("#.##0,00")
TxtSubTotal.Text = Total.ToString("#.##0,00")

TxtNroDocumento.Text = ""
TxtFechaDocumento.Text = ""
TxtCantidadItem.Text = ""
TxtCostoUnitario.Text = ""
TxtTotalCosto.Text = ""

MsgBox("Información de Recepción Actualizada")
End If
Next
End Sub
'Funciones para capturar los datos del encabezado de la recepción
Private Function CodEntrada() As Integer
Return TxtCodigo.Text
End Function
Private Function FechaHoraEntrada() As Date
Return TxtFecha.Text
End Function
Private Function TipoRecepcion() As Integer
Return CmbTipoRecepcion.SelectedValue
End Function
Private Function CodProveedor() As Integer
Return CmbProvee.SelectedValue
End Function
Private Function NroDoc() As String
Return TxtNroDocumento.Text
End Function
Private Function FechaDoc() As Date
Return TxtFechaDocumento.Text
End Function
Private Function SubTotalDoc() As Decimal
Return Val(Convert.ToDecimal(TxtSubTotal.Text))
End Function
Private Function ImpuestoDoc() As Decimal
Return Val(Convert.ToDecimal(TxtImpuesto.Text))
End Function
Private Function TotalDoc() As Decimal
Return Val(Convert.ToDecimal(TxtTotalDoc.Text))
End Function
Private Function StaDoc() As String
Return "1"
End Function

Private Sub TxtCantidadItem_TextChanged(sender As Object, e As EventArgs) Handles TxtCantidadItem.TextChanged

Dim ncan As Integer

Dim costo As Decimal
Dim total As Decimal

ncan = Val(TxtCantidadItem.Text)

costo = Convert.ToDecimal(TxtCostoUnitario.Text)

total = ncan * costo

TxtTotalCosto.Text = total.ToString

End Sub

Private Sub BtnMaeProductos_Click(sender As Object, e As EventArgs) Handles BtnMaeProductos.Click

FrmProductos.ShowDialog()

End Sub
Private Sub SetupGridDetalleItems()
DGDetalleItem.ColumnCount = 9
With DGDetalleItem
.ColumnHeadersDefaultCellStyle.Alignment = Windows.Forms.DataGridViewContentAlignment.MiddleCenter
.DataSource = Nothing
.GridColor = Color.Black
'.RowHeadersVisible = False

.Columns(0).HeaderText = "Item"
.Columns(0).DataPropertyName = "nro_item"
.Columns(0).Width = 50
.Columns(0).Visible = True


.Columns(1).HeaderText = "Descripción Producto"
.Columns(1).DataPropertyName = "des_producto"
.Columns(1).Width = 360
.Columns(1).Visible = True
.Columns(1).DefaultCellStyle.Alignment = Windows.Forms.DataGridViewContentAlignment.MiddleLeft

.Columns(2).HeaderText = "Nro Lote"
.Columns(2).DataPropertyName = "nro_lote"
.Columns(2).Width = 50
.Columns(2).Visible = False

.Columns(3).HeaderText = "Fecha Exp"
.Columns(3).DataPropertyName = "fecha_exp"
.Columns(3).Width = 90
.Columns(3).Visible = True

.Columns(4).HeaderText = "Cantidad"
.Columns(4).DataPropertyName = "cant"
.Columns(4).Width = 90
.Columns(4).Visible = True
.Columns(4).DefaultCellStyle.Alignment = Windows.Forms.DataGridViewContentAlignment.MiddleRight

.Columns(5).HeaderText = "Costo"
.Columns(5).DataPropertyName = "precio"
.Columns(5).Width = 90
.Columns(5).Visible = True
.Columns(5).DefaultCellStyle.Alignment = Windows.Forms.DataGridViewContentAlignment.MiddleRight

.Columns(6).HeaderText = "Total Item"
.Columns(6).DataPropertyName = "total"
.Columns(6).Width = 90
.Columns(6).Visible = True
.Columns(6).DefaultCellStyle.Alignment = Windows.Forms.DataGridViewContentAlignment.MiddleRight

.Columns(7).HeaderText = "Nva Existencia"
.Columns(7).DataPropertyName = "nva_existencia"
.Columns(7).Width = 286
.Columns(7).Visible = False

.Columns(8).HeaderText = "Codigo Producto"
.Columns(8).DataPropertyName = "cod_producto"
.Columns(8).Width = 1
.Columns(8).Visible = False
End With
End Sub

Private Sub CmbProvee_SelectedIndexChanged(sender As Object, e As EventArgs) Handles CmbProvee.SelectedIndexChanged
TxtNroDocumento.Focus()
End Sub
End Class
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Combobox SQL Seleccionar

Publicado por Phil Rob (1554 intervenciones) el 14/10/2021 22:22:30
Hola Anibal,

Lo siento, no he visto tu mensaje cuando es arribada. Ahora, aquí es la 22h y este es mañana que lo miraré con detalle.

Hoy, miro rápidamente tu código y veo un problema.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Private Sub FrmRecepProducto_Load(sender As Object, e As EventArgs) Handles MyBase.Load
TxtFecha.Text = Date.Now.ToString("g")
TxtCodigo.Text = CPNegocioRecep.NuevRegEntrada
Call CargaComboProveedores()
Call CargaComboProductos()     ' **************** CARGAR COMBO donde has los Bindings
Call CargaComboLotes()
Call CargaComboTipoDoc()
Call SetupGridDetalleItems()
 ' **************** En las lineas siguientes, borras las Bindings
For Each C As Control In Me.Controls ' Para muchas pruebas, es necesario de borrar anticas enlaces
Try
C.DataBindings.Clear()
Catch
End Try
Next
End Sub

En el procedimiento CargaComboProductos(), has las Bindings :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub CargaComboProductos()
For Each C As Control In Me.Controls ' Para muchas pruebas, es necesario de borrar anticas enlaces
Try
C.DataBindings.Clear()    ' Borrar las Bindings ANTE de las rehacer
Catch
End Try
Next
CmbProducto.DataSource = CPNegocio.ListaProductos.Tables("ListProductos")
CmbProducto.DisplayMember = "des_producto"
CmbProducto.ValueMember = "costo_porunidad"
 
TxtCostoUnitario.DataBindings.Add("Text", CPNegocio.ListaProductos.Tables("listProductos"), "costo_porunidad")
TxtNroDocumento.DataBindings.Add("Text", CPNegocio.ListaProductos.Tables("listProductos"), "cod_producto")
 
End Sub

Te propongo de borrar la cicla "Bindings.Clear" en el procedimiento FrmRecepProducto_Load.

Por favor, dice me la diferencia ante que estudio tu código mañana.

Buenas noches ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Anibal

Combobox SQL Seleccionar

Publicado por Anibal (21 intervenciones) el 14/10/2021 23:06:47
hecho, ninguna diferencia, de hecho los borre del load, los tenia alli cuando hacia algunas pruebas
antes de que me recomendara que los dejara solo en el procedimiento de la carga del combobox
saludos
gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Combobox SQL Seleccionar

Publicado por Phil Rob (1554 intervenciones) el 15/10/2021 09:38:27
Hola Anibal,

Espero resultado hoy ... pero es muy difícil de depurar sin ejecutar

En CargaComboProductos(), no es normal que escribes :
TxtNroDocumento.DataBindings.Add("Text", CPNegocio.ListaProductos.Tables("listProductos"), "cod_producto")
Quizá es mejor de escribir :
TxtCodigo.DataBindings.Add("Text", CPNegocio.ListaProductos.Tables("listProductos"), "cod_producto")

De otra manera, yo querría que probar la selección en el ComboBox ante haber "Click" ningun botón del Form. El Combo se llenar cuando el Form se abre y no es necesario de tocar un botón para probar el procedimiento CargaComboProductos().

Dice me ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Combobox SQL Seleccionar

Publicado por Phil Rob (1554 intervenciones) el 15/10/2021 13:46:15
Continuacion ...

Es posible que envias me el codigos de la clase CNProductos ?

...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Anibal

Combobox SQL Seleccionar

Publicado por Anibal (21 intervenciones) el 19/10/2021 01:46:10
Saludos Phil espero estés bien,
fin de semana sin acceso a internet

te adjunto el enlace donde esta el proyecto espero puedas verificarlo completo
y espero puedas apoyarme

agradecido de antemano

https://drive.google.com/file/d/1YVZfRVdpo-Yxx1zi2FoPbR6UPwIK77y8/view?usp=sharing
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Combobox SQL Seleccionar

Publicado por Phil Rob (1554 intervenciones) el 19/10/2021 14:11:27
Hola Anibal,

No puedo ejecutar tu programa y no puedo el depurar dinámicamente. No sé que es el objeto inicial.

He leo todos códigos en FrmRecepProducto, NRecepcion, CDManRecepcion, y varios otros. No veo donde es que impede los Bindings en TextBox de funcionar.

Pero veo otras anomalías (nada a ver con Bindings).
Este ejemplo viene de CDManRecepcion, pero existe mucho en el proyecto :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Public Function CargaComboTipoDoc() As DataSet
        Dim consulta As New DataSet
        cn = objConectar.Conectar
 
        cmdsql = New SqlDataAdapter("pa_CargaComboTipoEntrada", cn)
        cmdsql.Fill(consulta, "TipoEntrada")
 
        Return consulta    ' !!!!!!!!!!!!   AQUI, SALIMOS LA FUNCION : los códigos siguientes están nunca ejecutados
 
        'cierro los objetos    ' !!!!!!!!!!!!   MEJOR PARA LA MEMORIA DE PONER  cmdsql.Dispose() y  cn.Dispose() ANTE EL Return
consulta.Dispose()     ' !!!!!!!!!!!!   NO ESCRIBIR CONSULTA.Dispose ante el Return, y aquí, este es inútil
        cmdsql.Dispose()
        cn.Dispose()
    End Function

No me parece normal de instanciar un nuevo DataSet (la Consulta) para cada conexión. Para me, el DataSet debería ser único para todo el proyecto. Pero, la organización del proyecto es nCapas y no la conozco suficiente para intervenir.

Claro, no program con esta organización. Has visto mi ejemplo con los Bindings : un Form es suficiente para un grupo de datos.

La programación nCapas necesite mucho habito. Quizá deberías escribir en el titulo del mensaje cuando este es esta programación, ejemplo : Combobox SQL Seleccionar (nCapas).

Aqui, no puedo hacer mas ...
Si puedes me explicar como ejecutar ton proyecto, entonces miraré mas ...

...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Anibal

Combobox SQL Seleccionar

Publicado por Anibal (21 intervenciones) el 20/10/2021 01:16:46
Agradecido por tu tiempo y tomando nota de tus recomendaciones, seguiremos en contacto lastima no lograste correr el proyecto
para que vieras cual es el detalle que seguramente son problemas de forma mas no de fondo, sigo la programacion por capas por videos tutoriales y tratando de aprender y de fomentar dicho aprendizaje intenté realizar el proyecto,
tambien soy jubilado en el area de sistemas jamas trabaje con programas oriendados a objetos
de alli pues la gran variedad de problemas con las que me he conseguido
pero seguiremos adelante

Aun persiste el detalle de que al seleccionar del COMBOBOX el producto no me COLOCA en los TEXTBOX el COSTO del Producto y el CODIGO del Producto.-

agradecido grandemente hermano Phil por tu tiempo y dedicación


Saludos desde Venezuela
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Combobox SQL Seleccionar

Publicado por Phil Rob (1554 intervenciones) el 20/10/2021 10:43:39
He ido de te enviar mensaje por el sito, mira tus correos ...

...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar