Visual Basic.NET - Modificar Registro / ComboBox

 
Vista:
Imágen de perfil de Anibal

Modificar Registro / ComboBox

Publicado por Anibal (21 intervenciones) el 17/08/2021 05:07:57
ModComboBox
Saludos cordiales, agradecido de antemano con su tiempo, estoy ejercitando un CRUD con una talba Proveedores mediante una interfase hecha en visual.net (Modo Ejercicio Principiante) Cargo mediante un procedimiento almacenado en SQLSERVER, tres ComboBox, Categoria, Tipo de Ente, Indentificación, al momento de seleccionar el proveedor a modificar uso este codigo:


Private Sub BtnModificar_Click(sender As Object, e As EventArgs) Handles BtnModificar.Click
'Cambio el modo de Modificación

frmDetalle.Tipo = "MOD"

'Asigno los datos del proveedor seleccionado al formuario detalle
frmDetalle.CmbCategorias.Text = DGProveedores.CurrentRow.Cells(11).Value
FrmDetalle.CmbTipoEnte.Text = DGProveedores.CurrentRow.Cells(10).Value
FrmDetalle.CmbIdentifica.Text = DGProveedores.CurrentRow.Cells(9).Value

FrmDetalle.TxtCodigo.Text = DGProveedores.CurrentRow.Cells(0).Value
FrmDetalle.TxtNroIden.Text = DGProveedores.CurrentRow.Cells(1).Value
FrmDetalle.TxtNomProvee.Text = DGProveedores.CurrentRow.Cells(2).Value
FrmDetalle.TxtDirProvee.Text = DGProveedores.CurrentRow.Cells(3).Value
FrmDetalle.TxtTlfMovil.Text = DGProveedores.CurrentRow.Cells(4).Value
FrmDetalle.TxtTlfLocal.Text = DGProveedores.CurrentRow.Cells(5).Value
FrmDetalle.TxtMail.Text = DGProveedores.CurrentRow.Cells(6).Value
FrmDetalle.TxtContacto.Text = DGProveedores.CurrentRow.Cells(7).Value

If FrmDetalle.ShowDialog(Me) = Windows.Forms.DialogResult.OK Then
DGProveedores.DataSource = capaNegocio.ListarProveedores.Tables("Proveedores")
LblTotalReg.Text = capaNegocio.ListarProveedores.Tables("Proveedores").Rows.Count
Else
FrmDetalle.Tipo = ""
End If
'FrmDetalle.Dispose()
End Sub

Y me carga el formulario detalle con la información del proveedor para modificar, PERO: Quisiera que los ComboBox me permitan modificar también, es decir, que pueda seleccionar de las opciones allí mostradas, o si por el contrario no quiero modificar los datos porque están bien, pues me deje allí el código correspondiente a la opción listada, bien sabré agradecer sus buenos oficios al respecto de la orientación requerida!!! Gracias
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

Modificar Registro / ComboBox

Publicado por Phil Rob (1554 intervenciones) el 17/08/2021 10:01:10
Hola,

Unes la tabla con los datos con
1
DGProveedores.DataSource = capaNegocio.ListarProveedores.Tables("Proveedores").

Quizá que si también unes los TextBox a los campos del tabla, resuelvas tu problema.
Ejemplo del código necesario :
1
2
3
4
5
6
7
8
9
10
' Para ComboBox :
        CmbCategorias.DataSource = capaNegocio.ListarProveedores.Tables("Proveedores")
        CmbCategorias.DisplayMember = "Escribir aquí el nombre del campo en la tabla"
 
' Para ListBox :
        UnaListBox.DataSource = capaNegocio.ListarProveedores.Tables("Proveedores")
        UnaListBox..DisplayMember = "Escribir aquí el nombre del campo en la tabla"
 
' Para TextBox :
        TxtNomProvee.DataBindings.Add("Text", capaNegocio.ListarProveedores.Tables("Proveedores"), "Escribir aquí el nombre del campo en la tabla")
Y no hacer este :
1
2
3
4
frmDetalle.CmbCategorias.Text = DGProveedores.CurrentRow.Cells(11).Value
FrmDetalle.CmbTipoEnte.Text = DGProveedores.CurrentRow.Cells(10).Value
FrmDetalle.CmbIdentifica.Text = DGProveedores.CurrentRow.Cells(9).Value
' ... ... ...

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

Modificar Registro / ComboBox

Publicado por Anibal (21 intervenciones) el 17/08/2021 22:38:51
Gracias por tu tiempo Phil, tomaré en cuenta tu recomendación, pero te cuento el detalle que se me presenta es el siguiente, en el formulario detalle los comboboxs Categoría, TipoEnte, Identificación, se cargan con la opción con la que fue grabado el registro del proveedor correspondiente, mi consulta es la ésta: quisiera que así como me muestra la opción grabada al momento de registrar el proveedor, pudiese tener también la lista de las opciones desplegadas por si necesito MODIFICAR la Categoría, o El tipo de ENTE o El TIpo de Documento de Identificación, ya que como lo hago o como lo tengo hasta ahora, solo me muestra la opción en los Item con las que fue registrado al momento de agregarlo a la tabla como registro nuevo, no me muestra la lista de Item!
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 Anibal

Modificar Registro / ComboBox

Publicado por Anibal (21 intervenciones) el 17/08/2021 23:24:27
Realicé la prueba de tu recomendación PHIL, y por ejemplo en el combo categoría cuando lo ejecuto
CmbCategorias.DataSource = capaNegocio.ListarProveedores.Tables("Proveedores")
CmbCategorias.DisplayMember = "des_categoria", me muestra la categoría por decir "SISTEMA" tantas veces como proveedores halla, con dicha categoria!

Tengo una tabla Categorias
cod_categoria int
des_categoria varchar(30)

campos agregados,
1 Lacteos
2 Miscelaneos
3 Víveres
6 Sistemas
Ejemplo Incluyo un proveedor X, en el formulario tengo un formulario detalle donde al hacer clic en el boton NUEVO, carga el combobox CATEGORIA por medio de un procedimiento almacenado en SQL la lista de la tabla CATEGORIAS, selecciono la categoria a que pertenece el Proveedor X y todo bien, AHORA Cuando deseo modificar los datos del Proveedor X, al cargar la Categoria con la que fue grabado hago lo siguiente:
frmDetalle.CmbCategorias.Text = DGProveedores.CurrentRow.Cells(11).Value, mediante ésta instrucción me muestra la catergoría con la que fue grabado el registro del proveedor X, Mi Consulta espero explicarme bien y mis excusas de antemano, recuerden soy principiamte:
como hacer que el combobox CATEGORIA me muestre lcategorias con la que fue grabado el Registro de proveedor X pero al mismo tiempo despliegue la lista de las categorias de la tabla y asi pueda, dejar la que tiene desde su registro o modificarla por otra
Gracias nuevamente,
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

Modificar Registro / ComboBox

Publicado por Phil Rob (1554 intervenciones) el 18/08/2021 08:18:58
Hola,

Dices : "Incluyo un proveedor X, en el formulario tengo un formulario detalle donde al hacer clic en el boton NUEVO, carga me muestra la categoría por decir "SISTEMA" tantas veces como proveedores halla, con dicha categoria!". Debes revisar tu INSERT. Para la categoria, supongo que debe ser el cod_categoria que viene en el INSERT (y quizá es necesario de recargar el SELECT del DataGrig ?).
Para tener todos campos utiles de las categorias, puede escribir :

1
2
3
4
'
        CmbCategorias.DataSource = capaNegocio.ListarProveedores.Tables("Proveedores")
        CmbCategorias.DisplayMember = "des_categoria"
        CmbCategorias.ValueMember = "cod_categoria"

En este caso, el cod_categoria que debe venir en el INSERT es CmbCategorias.Value. No puede ser CmbCategoria.Text.

Pero, también comprendo que el fuente de datos no es mismo para ComboBox.Text y para la lista del ComboBox. Cuando muestras los campos del registro que existe en DGProveedores, muestra un Proveedor con su categoría y en formulario detalle quieres ver esta categoría en el zona Text del Combo y quieres ver todas categorías cuando desenrollas la lista del Combo.

No puedo hacer el ejemplo exacto de tu solución, pero este es una pista :

Debes tener 2 consultas.
Una (con un JOIN) da los proveedores con la categoría de cada. Este da la tabla capaNegocio.ListarProveedores.Tables("Proveedores").
Segunda consulta es : SELECT * FROM LaTablaDeLasCategorias. Este da a tabla capaNegocio.ListarProveedores.Tables("TodasCategorias").
Después, ajustas el Combo como este :

1
2
3
4
5
6
' llenar el Combo con todos datos de todas categorias :
        CmbCategorias.DataSource = capaNegocio.ListarProveedores.Tables("TodasCategorias"), "des_categoria")
        CmbCategorias.DisplayMember = "des_categoria"
        CmbCategorias.ValueMember = "cod_categoria"
' Mostrar en la zona de texto del Combo, la categoria del registro seleccionado en el DGProveedores
        CmbCategorias.DataBindings.Add("Text", capaNegocio.ListarProveedores.Tables("Proveedores"), "des_categoria")

Entonces, el Combo muestra la categoría como en el DGV pero te permite de seleccionar otra en su lista.

No he mas tiempo hoy o mañana. Este solamente viernes que tendré poco tiempo.

Espero que este te permitirá de avanzar ....

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

Modificar Registro / ComboBox

Publicado por Anibal (21 intervenciones) el 20/08/2021 03:17:54
Muchas Gracias Phil por tu tiempo de verdad y tu dedicación seguí tu recomendación y en efecto logré hacer que me hiciese lo que necesitaba, pero al momento de guardar no me cambia la categoria, es decir selecciono otra categoria y no la cambia deja la misma, te adjunto las imagenes y por ejemplo al hacer una modificación y guardar y tratar de ejecutar de nuevo la modificación me da un error de exepción no identificada
categoria
Erroralcambiar

pero tu recomendación esta dando el resultado que estaba necesitando, de verdad muchas 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 Anibal

Modificar Registro / ComboBox

Publicado por Anibal (21 intervenciones) el 20/08/2021 05:09:57
Sigo revisando Phil y me doy cuenta en que la tabla de la base de datos si me hace el cambio,
te ambiento mas en mi "logica de programación usada ", perdón sigo siendo principiante agradecido por tu apoyo
El Formulario frmProveedores muestra una lista general de los proveedores de la tabla,
al Pulsar sobre cualquiera de las Filas se habilitan los botones de modificar o Eliminar, al hacer clic sobre el botón modificar por ejemplo, se abre el formulario frmDetProveedor, donde muestra la información detallada del proveedor habilitada para modificar, nada del otro mundo, en mi ejercicio de aprendizaje, a esta altura y gracia a tu apoyo / orientación. En este punto aunque en la consulta mostrada en el grid de proveedores la categoria ha cambiado, al ejecutar el formulario detalle no se ubica dentro de la lista, propiedad text del combo en la categoria que tiene la consulta, antes pensaba que no lo cambiaba pero si la cambia en la tabla, y se ve en la consulta cargada en el grid
adjunto la imagen

Bonton Modificar
frmDetalle.CmbCategorias.Text = DGProveedores.CurrentRow.Cells(11).Value
FrmDetalle.CmbTipoEnte.Text = DGProveedores.CurrentRow.Cells(10).Value

CambioCategorias
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

Modificar Registro / ComboBox

Publicado por Phil Rob (1554 intervenciones) el 20/08/2021 09:01:55
Hola,

Con el error en esta linea :

1
CmbCategorias.DataBindings.Add("Text", capaNegocio.ListarProveedores.Tables("Proveedores"), "des_categoria")

debes ver si el campo "des_categoria" es presente en la consulta que llena la tabla "Proveedores".
Quizás puedes enviar me el texto del consulta que da los registros a la tabla "Proveedores".

Aqui es un problema :

1
2
frmDetalle.CmbCategorias.Text = DGProveedores.CurrentRow.Cells(11).Value
FrmDetalle.CmbTipoEnte.Text = DGProveedores.CurrentRow.Cells(10).Value

Si haces como te lo explicar, para unir las zonas de mostrada de los datos , no debes re escribir las zonas cuando cambias una.
Todas las zonas de mostrada están unidos al mismo registro cuando cambias una zona, todas están cambiadas.

Si tus cambiadas están escritos en la DB, quizá es necesario de re-llamar CargoComboCategorias().

Veo que utilizas Function CapCodCategoria(). Porqué no utilizas los procedimientos eventos :

1
2
3
4
5
6
7
8
9
Private Sub CmbCategorias_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles CmbCategorias.SelectedIndexChanged
' El código es escrito en Try por que durante el cargada del Form, este evento viene cuando no existe ya datos. Este da error.
        Try
' los valores Text y SelectedValue, y otros, están presentes aquí :
' por ejemplo :
            MessageBox.Show(CmbCategorias.SelectedValue)
        Catch
        End Try
   End Sub

Voy buscar ejemplo simple programa con estas herramientas y te lo enviaré.

...
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

Modificar Registro / ComboBox

Publicado por Phil Rob (1554 intervenciones) el 20/08/2021 13:26:56
Continuacion ...

Te envio un proyecto completo para ti ver como trabajo. No es el solo método…
Pareces organizar tus códigos en “capas”. No lo hace. Si el objetivo de tu proyecto es aprender la programación nCapas, no puedo te dar buenas pistas, no tengo bastante experiencia en este modo.

Podes probar mis códigos para ver los enlaces entre los registros en los objetos para mostrar.

El sistema de DB es Access. Espero que puedes lo ejecutar. Si no, puedes cambiar la “ConnectionString” para una tabla "TProduit" creada en tu sistema.

Utilizo 2 métodos para cargar los registros. El DataReader y el DataAdapter. En un proyecto, un solo método es suficiente. Prefiero el DataAdapter. Aquí, utilizas uno u otro, este sin importancia.
Para funcionar, este es necesario que cambias la “ConnectionString” en el procedimiento ParametroConexion() porque este será diferente en tu PC.

Mira el video que muestra que cambiar una zona cambia todas. Aquí, las modificaciones no son registrar en la DB, solamente en el DataTable.
https://www.dropbox.com/s/b2q87ovv8pv5wj7/ConMostrarSimple.mp4?dl=0

Quizá podes me enviar el esquema de la DB y los códigos SQL que están en tu programa ?

...
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

Modificar Registro / ComboBox

Publicado por Phil Rob (1554 intervenciones) el 21/08/2021 09:02:07
Hola,

Ayer, he dicho "... puedes cambiar la “ConnectionString” para una tabla "TProduit" creada en tu sistema".
No es tan simple. No probas. Este debe tener otras modifications, notamente la librería OleDb a reemplazar para tu sistema.

Para lo hacer, debo dar mas informaciones.

Lo siento ...
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

Modificar Registro / ComboBox

Publicado por Anibal (21 intervenciones) el 23/08/2021 16:42:08
Saludos, agradecido por el tiempo y la dedicación, reviso tus recomendaciones seguramente ayudarán mucho a entender este nuevo enfoque para mi de la programación
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