ComboBox en DataGridView

publicado por: Anonymous

Trabajo en una app Windows Forms en el cual tengo un control DataGridView en el cual una de sus columnas es de tipo Combobox puedo poblar de datos el ComboBox sin ningún problema.

El problema que tengo es que necesito que el primer elemento que contiene el Combobox este seleccionado en este caso es <<Seleccione>> no he podido conseguirlo a primera vista no se ve nada en el ComboBox hasta que se haga click para poder desplegar el ComboBox y poder seleccionar los items.

De esta manera cargo el ComboBox

public IEnumerable<UniversalExtend> SelectList(Expression<Func<UnidadMedida, UniversalExtend>> source)
    {
        return _unidadMedidaRepository.SelectList(source);
    }

    public IEnumerable<UniversalExtend> ListaUnidadMedidas
        (Expression<Func<UnidadMedida, UniversalExtend>> source)
    {
        var listaItem = SelectList(source).ToList();
        listaItem.Insert(0, new UniversalExtend() { Id = -1, Descripcion = "<<<Seleccione>>>" });
        return listaItem;
    }

Persistencia

public IEnumerable<UniversalExtend> SelectList(Expression<Func<T, UniversalExtend>> source)
    {
        using (var context = new BusinessContext())
        {
            var result = context.Set<T>().AsNoTracking()
                .Select(source).ToList();
            return result;
        }
    }

Enlazando los datos al ComboBox

dataGridView1.AutoGenerateColumns = false;
        DataGridViewComboBoxColumn cboColMedida = dataGridView1.Columns["colCombo"] as DataGridViewComboBoxColumn;
        cboColMedida.DataSource =
            _saUnidadMedida.ListaUnidadMedidas(
                x => new UniversalExtend() {Id = x.UnidadMedidaId, Descripcion = x.Abreviacion}).ToList();
        cboColMedida.DisplayMember = "Descripcion";
        cboColMedida.ValueMember = "Id";

De esta manera es como se muestra cuando el cbo ya esta cargado de datos.
ComboBox

solución

He estado jugando con tu código y la respuesta es bastante simple basta con asignarle un valor a la celda del combobox (En tu ejemplo darle el valor -1 que declaraste en el Id) justo después de enlazar los datos con tu combobox.

dataGridView1.Rows[0].Cells["colCombo"].Value =-1;

Es decir en la parte del código donde asignas el DataSource quedaría así:

    dataGridView1.AutoGenerateColumns = false;
    DataGridViewComboBoxColumn cboColMedida = dataGridView1.Columns["colCombo"] as DataGridViewComboBoxColumn;
    cboColMedida.DataSource =
            _saUnidadMedida.ListaUnidadMedidas(
                x => new UniversalExtend() {Id = x.UnidadMedidaId, Descripcion = x.Abreviacion}).ToList();
    cboColMedida.DisplayMember = "Descripcion";
    cboColMedida.ValueMember = "Id";
    dataGridView1.Rows[0].Cells["colCombo"].Value =-1;
    dataGridView1.RowsAdded += DataGridView1OnRowsAdded;

Y la función que realizará la selección cada vez que se añada una nueva fila quedaría:

private void DataGridView1OnRowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
    {
        dataGridView1.Rows[e.RowIndex].Cells["colCombo"].Value = -1;
    }

Espero que te pueda solverntar el problema.

Un saludo

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *