none
Predeterminar la seleccion de un Combobox RRS feed

  • Pregunta

  • el problema que tengo es el Siguiente, tengo un Combobox que lo lleno con data source de la siguiente manera:

     Public Function DEPARTAMENTOS(ByVal id As Integer) As DataTable
            MODEL.REGION = id
            Dim data = MODEL.Listar_Departamento
            Dim row As DataRow = data.NewRow()
            row.Item("ID") = 0
            row.Item("Departamento") = "Seleccione una Opción"
            data.Rows.InsertAt(row, 0)
            Return (data)
        End Function
    Public Function Listar_Departamento() As DataTable
            db.CONSULTA = "SELECT D.IdDepartamento as ID, D.Departamento as DEPARTAMENTO FROM vw_region as R INNER JOIN vw_departamento as D on (R.ID=D.IdRegion) WHERE D.IdRegion=" & REGION
            db.CUSTOMQUERYREADER()
            Return db.DATATABLE
        End Function

            cmbprueba.DisplayMember = "REGION"
            cmbprueba.ValueMember = "ID"
            _mregion = New region_control
            cmbprueba.DataSource = _mregion.REGIONES

    donde "_mregion.REGIONES" es un procedimiento que contiene la consulta con los datos, al tratar de inicializar el combobox en x o y item que contenga este siempre me pone por defecto el primero lo he intentado con selectedIndex, selectedValue, selecteditem, text, selectedText y nada siempre me deja el primer elemento seleccionado, otra cosa que he notado cuando trato de asignarle el valor que deseo es que el combobo el items.count siempre esta en cero y al visualizar el combo el tiene los datos correctamente, el DropDownStyle lo tengo en DropDown ya he investigado todos los posible errores pero aun asi no logro que seleccione la opcion que deseo

    domingo, 16 de noviembre de 2014 22:18

Respuestas

  • Ya encontre cual era mi error lo que pasa es que esos controles los tengo dentro de un Tabcontrol y al cargar el formulario para evitar que me cargara las pestañas del Tabcontrol hacia lo siguiente:

    TabControl2.Alignment = TabAlignment.Bottom
    tpdatos.Parent = Nothing
    tpdatosadicionales.Parent = Nothing
    tpdireccion.Parent = Nothing

    y al hacer click en un boton hacia lo siguiente para que me volviera a mostrar la pestaña del Tabcontrol:

    tpdatos.Parent = TabControl1
    TabControl1.SelectedIndex = 1
    tpClientes.Parent = Nothing
    tpdatosadicionales.Parent = Nothing
    tpdireccion.Parent = Nothing

    Al parecer esto evita que mi combobox trabaje de manera correcta

    lunes, 17 de noviembre de 2014 0:10

Todas las respuestas

  • Hola:

     Lo primero tu consulta Sql deberia de estar parametrizada:

    "SELECT D.IdDepartamento as ID, D.Departamento as DEPARTAMENTO FROM vw_region as R INNER JOIN vw_departamento as D on (R.ID=D.IdRegion) WHERE D.IdRegion= @REGION"

    Veo que asignas el Id a la propiedad ValueMember del ComboBox, por lo cual al hacer algo como esto:

    cmbprueba.SelectedValue = 5

    Deberia de selecionarte el item correspondiente al id 5, podrias invertir el orden de las lineas:

     _mregion = New region_control
     cmbprueba.DataSource = _mregion.REGIONES
     cmbprueba.DisplayMember = "REGION"
     cmbprueba.ValueMember = "ID"
    Solo para descartar que no sea este el que te este dando el problema.


    Saludos desde Monterrey, Nuevo León, México!!!

    domingo, 16 de noviembre de 2014 22:24
  • Hola:

    Primero Muchas gracias por responde.

    Segundo la consulta no esta parametrizada ya que la estoy enviando desde Visual hacia Mysql. en cuanto al ValueMember probe el invertir el orden como me lo sugirio pero aun asi no selecciona la opcion que deseo siempre queda por defecto la primera y como comente antes ya intente usar selectedIndex, selectedValue, selecteditem, text, selectedText y aun asi no consigo que quede la seleccion que deseo

    domingo, 16 de noviembre de 2014 22:46
  • hola

    algo no entiendo, en el codigo que muestras la query devuelve los campos

    SELECT D.IdDepartamento as ID, D.Departamento as DEPARTAMENTO

    pero luego en el combo usas

    cmbprueba.DisplayMember = "REGION" cmbprueba.ValueMember = "ID"

    como se deberia interpretar ?

    el metodo se llama DEPARTAMENTOS() pero usas

    cmbprueba.DataSource = _mregion.REGIONES

    de donde sale este _mregion ?

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    domingo, 16 de noviembre de 2014 22:48
  • Perdon me equivoque de codigo, en si el codigo es de la siguiente manera:

     Public Sub prueba()
            _mregion = New region_control
            cmbprueba.DataSource = _mregion.REGIONES
            cmbprueba.DisplayMember = "REGION"
            cmbprueba.ValueMember = "ID"
        End Sub
     Public Function REGIONES() As DataTable
            Dim data = MODEL.Listar_Regiones
            Dim row As DataRow = data.NewRow()
            row.Item("ID") = 0
            row.Item("REGION") = "Seleccione una Opción"
            data.Rows.InsertAt(row, 0)
            Return (data)
        End Function
    Public Function Listar_Regiones() As DataTable
       db.CONSULTA = "select * from tbl_region"
            db.CUSTOMQUERYREADER()
            Return db.DATATABLE
        End Function

    al tratar de de llenar el combo y tratar de preseleccionar el la opcion que deseo lo hago de la siguiente manera:

    Public sub seleccion()
    
    Dim Valor_Deseado as Integer = 5
    prueba()
    cmbprueba.SelectedValue = Valor_Deseado
    
    End sub



    • Editado Ichigogabo domingo, 16 de noviembre de 2014 23:03
    domingo, 16 de noviembre de 2014 23:02
  • La manera en la que quieres hacer el seleccionado predeterminado del combobox es la correcta no entiendo cual es el problema o cual es el error que emite tu aplicación. 

    Ojo: El valor deseado es "5" Tengo entendido que aveces me ha pasado es por el tipo de dato que se define en base de datos y es el motivo por el cual aveces no selecciona un valor por mas que aparentemente sean igual visualmente pero no de tipo de dato igual a que me refiero 5 integer y 5 string definido en base de datos, es lo mas probable que sea eso. Saludos espero que te haya servido gracias.

    domingo, 16 de noviembre de 2014 23:26
  • Yo pense lo mismo pero al revisar mi BD mire que el tipo de datos es Integer, al igual que pense que al obtener los datos estos me llegaban como string pero igual trate de preseleccionar el 5 de tipo string pero aun asi nada. otra observacion es que al ejecutar el proyecto paso a paso la propiedad items del combo es 0 y al tratar de asignar el SelectedValue este siempre queda en Nothing y he intentado de todo pero aun asi nada
    domingo, 16 de noviembre de 2014 23:37
  • que pasa si usas


    Public Sub prueba()

    _mregion = New region_control cmbprueba.DisplayMember = "REGION" cmbprueba.ValueMember = "ID"

    cmbprueba.DataSource = _mregion.REGIONES

    End Sub


    defines las propiedades antes del Datasource

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    domingo, 16 de noviembre de 2014 23:44
  • Ya encontre cual era mi error lo que pasa es que esos controles los tengo dentro de un Tabcontrol y al cargar el formulario para evitar que me cargara las pestañas del Tabcontrol hacia lo siguiente:

    TabControl2.Alignment = TabAlignment.Bottom
    tpdatos.Parent = Nothing
    tpdatosadicionales.Parent = Nothing
    tpdireccion.Parent = Nothing

    y al hacer click en un boton hacia lo siguiente para que me volviera a mostrar la pestaña del Tabcontrol:

    tpdatos.Parent = TabControl1
    TabControl1.SelectedIndex = 1
    tpClientes.Parent = Nothing
    tpdatosadicionales.Parent = Nothing
    tpdireccion.Parent = Nothing

    Al parecer esto evita que mi combobox trabaje de manera correcta

    lunes, 17 de noviembre de 2014 0:10