• Sábado 4 de Mayo de 2024, 12:11

Autor Tema:  Combobox y SelectedValue vinculado a datos  (Leído 2207 veces)

epj_sevillista

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Combobox y SelectedValue vinculado a datos
« en: Miércoles 23 de Marzo de 2011, 12:53 »
0
Hola, amigos. Tengo un formulario para manejar los datos de una tabla SQL Server. Uno de los campos es 'IndicePais', que es un número entero. Para éste quiero que el usuario lo seleccione desde un combo box, pero no seleccionando el código directamente, sino que seleccione un país y se guarde su código. La información que se guarda en este campo es:

1 para España
8 para Portugal
15 para Francia
7 para Italia

Quiero que las opciones del combo sean los nombres de los paises, pero quiero que en el campo se almacene el código asociado. Para ello, he hecho lo siguiente:

1) El combo lo vinculo con el campo 'IndicePais' en DataBindings, para la propiedad 'SelectedValue'.
2) Como se trata de una lista fija de valores, no extraida de ningún dataset, me he creado la siguiente clase:

    public class ClaseElementoCombo
    {
        private string _ParaMostrar;  // Cadena que voy a mostrar en el combo
        private int _ParaValor;  // Valor que quiero que me devuelva el combo cuando selecciono el elemento en SelectedValue

        public ClaseElementoCombo(string pm, int pv)
        {
            _ParaMostrar = pm;
            _ParaValor = pv;
        }

        public string ParaMostrar
        {
            get
            {
                return _ParaMostrar;
            }
        }
        public int ParaValor
        {
            get
            {
                return _ParaValor;
            }
        }
    }


En el constructor del formulario, incluyo el siguiente código para establecer el datasource para el combo:

        public Form1()
        {
            InitializeComponent();

            ArrayList lb = new ArrayList();
            lb.Add(new ClaseElementoCombo("España", 1));
            lb.Add(new ClaseElementoCombo("Portugal", 8));
            lb.Add(new ClaseElementoCombo("Francia", 15));
            lb.Add(new ClaseElementoCombo("Italia", 7));
            codigoZonaComboBox.ValueMember = "ParaValor";
            codigoZonaComboBox.DisplayMember = "ParaMostrar";
            codigoZonaComboBox.DataSource = lb;
        }

Lo curioso del tema es que:

- Cuando se carga un registro en el formulario, el combo no muestra ningún valor.
- Cuando pincho para desplegar los elementos del combo, me muestra los cuatro paises, tal y como quiero. Si selecciono uno, y salgo del combo, el combo vuelve a quedarse vacío.
- Sin embargo, si grabo los datos, me graba en el campo el código del país que he seleccionado, a pesar de no quedarse visualizado el país seleccionado en el control combo box.
- Si este combo lo desvinculo de los datos para probarlo, funciona bien. Falla cuando está vinculado de la manera que describo a un campo de un databindingsource.

A ver si me podéis echar una manilla, que este tema me tiene un poco desorientado.

Gracias.

gabio2

  • Miembro MUY activo
  • ***
  • Mensajes: 402
  • Nacionalidad: mx
    • Ver Perfil
Re: Combobox y SelectedValue vinculado a datos
« Respuesta #1 en: Miércoles 23 de Marzo de 2011, 15:32 »
0
Carga tu combo con un DataTable y luego solo aplicar el DisplayMember y ValueMember, ejemplo:

Código: C#
  1.  
  2. this.ComboBox1.DataSource = MiDataTable;
  3. this.ComboBox1.DisplayMember = "NombrePais"; //NombrePais debe ser el campo de tu tabla donde almacenas el NOMBRE de los países
  4. this.ComboBox1.ValueMember = "IndicePais"; //El valor que quieres que valga cuando el usuario lo seleccione.
  5.  
  6.  

Eso es todo, espero te sirva saludos! :)..
@gabio87