none
Cargar elementos a un combobox de un formulario referenciandolo como parametro RRS feed

  • Pregunta

  •  Tengo dos formularios que tienen un combobox que se debe de llenar con items al abrirlos. Uno se llama Frm_gastocomprobar y el otro Frm_viaticos

    Ambos tienen un combobox llamado cmb_tipos_gastos

    Lo que quiero es aplicar un procedimiento para llenarlo con un procedimiento que me permita establecer como parametro el formulario. Este es el procedimiento, pero me bota error cuando trato de referenciarlo. En donde utilizo el parametro formulario me manda error 'Cmb_tipos_receptor' no es un miembro de 'System.Windows.Forms.Form'.


    Private Sub Frm_Gastoporcomprobar_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
                  carga_tipos_receptor(Me)
     End Sub

    Public Sub carga_tipos_receptor(formulario As Form)
            Dim dttiposreceptores As New DataTable()
            Dim num_tiposreceptores As Integer
            Dim dclavetipo As String
            Dim dnombretipo As String
            Try
                Dim cadena As String
                cadena = "SELECT Clave_tipo_receptor, Nombre_tipo_receptor FROM GXC_Tipos_receptor;"
                Dim datiposreceptores As New OleDb.OleDbDataAdapter(cadena, conn)
                datiposreceptores.Fill(dttiposreceptores)
                datiposreceptores.Dispose()
                formulario.Cmb_tipos_receptor.Items.Clear()
                num_tiposreceptores = dttiposreceptores.Rows.Count
                If num_tiposreceptores = 0 Then
                    ' MsgBox("No hay ninguna operacion pendiente de contabilizar")
                Else
                    For i = 0 To dttiposreceptores.Rows.Count - 1
                        dclavetipo = dttiposreceptores.Rows(i)("Clave_tipo_receptor")
                        dnombretipo = dttiposreceptores.Rows(i)("Nombre_tipo_receptor")
                        formulario.Cmb_tipos_receptor.Items.Add(dclavetipo & " " & dnombretipo)
                    Next
                End If
                dttiposreceptores.Dispose()
                formulario.Cmb_tipos_receptor.SelectedIndex = 0
            Catch ex As Exception
                MsgBox(ex.ToString)
            End Try
            'dr.Close()

        End Sub

    Alguien me podra orientar como cambio el codigo para que funcione. Podria solucionarlo haciendo mencion especifica al formulario que que quiero modificar, pero eso me llevaria a duplicar el codigo.

    miércoles, 13 de enero de 2021 20:19

Respuestas

  • Hola:
    Prueba este ejemplo adaptandolo a tu "escenario"

        Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Dim lsQuery As String = "Select ID_ORGANISMO, DESCRIPCION From ORGANISMO Order by DESCRIPCION"
            Comun.gP_CargaCombo(Me.cboBOrganismo, lsQuery, "DESCRIPCION", "ID_ORGANISMO")
        End Sub


    Public Class Comun


        Public Shared Sub gP_CargaCombo(ByRef cboComboBox As ComboBox, ByVal vsQuery As String, ByVal vsVisualiza As String, ByVal vsValor As String)
            Try
                Dim loDataTable As New DataTable
                Using loConexion As New OleDbConnection(vsCadConexion)
                    Using loDataAdapter As New OleDbDataAdapter(vsQuery, loConexion)
                        loDataAdapter.Fill(loDataTable)
                    End Using
                End Using
                If loDataTable.Rows.Count > 0 Then
                    'Creamos un nuevo registro para el elemento en blanco
                    Dim loFila As DataRow = loDataTable.NewRow()
                    loFila.Item(vsValor) = 0
                    loFila.Item(vsVisualiza) = ""
                    ' Insertamos la nueva fila en la primera posición del objeto DataTable.
                    loDataTable.Rows.InsertAt(loFila, 0)
                End If
                With cboComboBox
                    .DataSource = loDataTable
                    .DisplayMember = vsVisualiza
                    .ValueMember = vsValor
                    .SelectedIndex = -1
                End With
            Catch ex As Exception
                MessageBox.Show(ex.Message, "gP_CargaCombo", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
        End Sub

     
    End Class
    • Propuesto como respuesta EricRRModerator viernes, 15 de enero de 2021 16:05
    • Marcado como respuesta EricRRModerator viernes, 29 de enero de 2021 18:32
    jueves, 14 de enero de 2021 12:44

Todas las respuestas

  • Hola Héctor,

    Gracias por levantar tu consulta en los foros de MSDN.

    Eric Ruiz

    ____________________________

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

    Si tiene algún cumplido o reclamo sobre el soporte de MSDN siéntase en la libertad de contactar MSDNFSF@microsoft.com.

    miércoles, 13 de enero de 2021 23:19
    Moderador
  • Hola:
    Prueba este ejemplo adaptandolo a tu "escenario"

        Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Dim lsQuery As String = "Select ID_ORGANISMO, DESCRIPCION From ORGANISMO Order by DESCRIPCION"
            Comun.gP_CargaCombo(Me.cboBOrganismo, lsQuery, "DESCRIPCION", "ID_ORGANISMO")
        End Sub


    Public Class Comun


        Public Shared Sub gP_CargaCombo(ByRef cboComboBox As ComboBox, ByVal vsQuery As String, ByVal vsVisualiza As String, ByVal vsValor As String)
            Try
                Dim loDataTable As New DataTable
                Using loConexion As New OleDbConnection(vsCadConexion)
                    Using loDataAdapter As New OleDbDataAdapter(vsQuery, loConexion)
                        loDataAdapter.Fill(loDataTable)
                    End Using
                End Using
                If loDataTable.Rows.Count > 0 Then
                    'Creamos un nuevo registro para el elemento en blanco
                    Dim loFila As DataRow = loDataTable.NewRow()
                    loFila.Item(vsValor) = 0
                    loFila.Item(vsVisualiza) = ""
                    ' Insertamos la nueva fila en la primera posición del objeto DataTable.
                    loDataTable.Rows.InsertAt(loFila, 0)
                End If
                With cboComboBox
                    .DataSource = loDataTable
                    .DisplayMember = vsVisualiza
                    .ValueMember = vsValor
                    .SelectedIndex = -1
                End With
            Catch ex As Exception
                MessageBox.Show(ex.Message, "gP_CargaCombo", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
        End Sub

     
    End Class
    • Propuesto como respuesta EricRRModerator viernes, 15 de enero de 2021 16:05
    • Marcado como respuesta EricRRModerator viernes, 29 de enero de 2021 18:32
    jueves, 14 de enero de 2021 12:44