none
enlazar combobox desde una columa de un datagrid... RRS feed

  • Pregunta

  • buenas compañeros.. 

    miren tengo un datagrid.. que cargo desde codigo.. de la base de datos...

    cuando hago click en el datagrid.. capturo los valores de las columas.. y las enlazo a unos textbox, para que el usuario pueda hacer los movimientos del crud.

    palabras mas palabras menos..

    cuando el usuario hace click en la columna.. salen todos los datos.. en los textbox.. eso lo controlo en el evento cellclick de la grilla...y cargo los textbox asi

     txtCodigo.Text = Convert.ToString(dtgcliente.CurrentRow.Cells["clmCodigo"].Value.ToString());
      txtDocumento.Text = Convert.ToString(dtgcliente.CurrentRow.Cells["clmdcto"].Value.ToString());

    etc.

    la pregunta.. como puedo cargar mi combobox.. de las dos columnas que me sirven en el datagrid que son: idestado, y estado

    la primera me trae el id del estado y la otra el estado(activo, inactivo etc)..he intentado..

    cargarlo al seleccionar el usuario en la grilla asi..(en el evento cell click de la grilla)

    cmbEstado.ValueMember = Convert.ToInt32(dtgcliente.CurrentRow.Cells["clmidestado"].Value).ToString();
     cmbEstado.DisplayMember= Convert.ToString(dtgcliente.CurrentRow.Cells["clmestado"].Value.ToString());

    pero me sale esta excepcion:Información adicional: No se puede enlazar con el nuevo miembro de valor.

    yo lo que quiero es hacer dos cosas

    cargar el combo con el id y el estado que lo traigo del datagrid,... y

    que si el usuario le da click al boton actualizar cambios.. se cargue el combobox  con las demas opciones.. pero selecionada por defecto la que el usuario tiene.. por si el usuario quiere darle guardar cambios sin haber modificado nada.... no tome por defecto otra  la primera opcion que es la carga por defecto...


    cabe anotar que las celdas que uso en la grilla.. son celdas planas.. osea no hay celdas de combo ni nada..
    martes, 26 de diciembre de 2017 3:49

Respuestas

  • miren al hacer click.. en la columna del datagrid..

    asi es como cargo el combo

     idclien =(dtgcliente.CurrentRow.Cells["clmidestado"].Value.ToString());

                cmbEstado.ValueMember = idclien;

                cmbEstado.Text = Convert.ToString(dtgcliente.CurrentRow.Cells["clmestado"].Value.ToString());

    de esta manera cargo el combo... del cliente seleccionado en la grilla..

    pero tengo dos dudas..

    1)como hago para controlar el donde el usuario le da click al boton actualizar.. y cargue  las opcoines del estado del cliente (de la base de datos), pero que deje selecionado por defecto.. el estado del cliente que el señalo en la grilla..(el id y el estado) para poder programar.. si el usuario decida darle en guardar.. y no hace ning

    un cambio.. se guarden los mismo valores..

    este combo si me ha dado dolores de cabeza..=(

    2)o si el usuario hace cambios en el combo poder hacer las actualizaciones necesarias..

    miércoles, 27 de diciembre de 2017 4:14

Todas las respuestas

  • en el evento  de celldobleclick asigna una variable a la celda idEstado no lleves directo del datagrid

    private void dtgcliente_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
    {
    var_intclmidestado = Convertir._ToInt(Convert.ToInt32(dtgcliente.CurrentRow.Cells["clmidestado"].Value).ToString());
    cboInsumo.ValueMember = "IdEstado";
    cboInsumo.SelectedValue = var_intclmidestado ;
    
    }


    luego mira como te va

    usa variables

    martes, 26 de diciembre de 2017 14:42
  • miren al hacer click.. en la columna del datagrid..

    asi es como cargo el combo

     idclien =(dtgcliente.CurrentRow.Cells["clmidestado"].Value.ToString());

                cmbEstado.ValueMember = idclien;

                cmbEstado.Text = Convert.ToString(dtgcliente.CurrentRow.Cells["clmestado"].Value.ToString());

    de esta manera cargo el combo... del cliente seleccionado en la grilla..

    pero tengo dos dudas..

    1)como hago para controlar el donde el usuario le da click al boton actualizar.. y cargue  las opcoines del estado del cliente (de la base de datos), pero que deje selecionado por defecto.. el estado del cliente que el señalo en la grilla..(el id y el estado) para poder programar.. si el usuario decida darle en guardar.. y no hace ning

    un cambio.. se guarden los mismo valores..

    este combo si me ha dado dolores de cabeza..=(

    2)o si el usuario hace cambios en el combo poder hacer las actualizaciones necesarias..

    miércoles, 27 de diciembre de 2017 4:14
  • leandro podrias ayudarme..
    miércoles, 27 de diciembre de 2017 5:05
  • Hola joseblanco6663

    De acuerdo a tu consulta, te recomiendo probar el siguiente código que puede serte útil.

     

    private DataTable DevuelveDatos()
    {
        DataTable dt = new DataTable;
        dt.Columns.Add("CodigoEmpresa");
        dt.Columns.Add("CodigoArticulo");
        dt.Columns.Add("Inact");
        DataRow row = dt.NewRow;
        row("CodigoEmpresa") = "1";
        row("CodigoArticulo") = "1";
        row("Inact") = "-1";
        dt.Rows.Add(row);
        row = dt.NewRow;
        row("CodigoEmpresa") = "2";
        row("CodigoArticulo") = "2";
        row("Inact") = "0";
        dt.Rows.Add(row);
        row = dt.NewRow;
        row("CodigoEmpresa") = "3";
        row("CodigoArticulo") = "2";
        row("Inact") = "-1";
        dt.Rows.Add(row);
        row = dt.NewRow;
        row("CodigoEmpresa") = "4";
        row("CodigoArticulo") = "2";
        row("Inact") = "0";
        dt.Rows.Add(row);
        row = dt.NewRow;
        row("CodigoEmpresa") = "5";
        row("CodigoArticulo") = "4";
        row("Inact") = "0";
        dt.Rows.Add(row);
        return dt;
    }

    private DataTable GetDatos()
    {
        DataTable dt = new DataTable;
        dt.Columns.Add("valor");
        dt.Columns.Add("key");
        DataRow row = dt.NewRow;
        row("valor") = "Si";
        row("key") = "-1";
        dt.Rows.Add(row);
        row = dt.NewRow;
        row("valor") = "No";
        row("key") = "0";
        dt.Rows.Add(row);
        return dt;
    }

    private void Form1_Load(System.Object sender, System.EventArgs e)
    {
        this.DataGridView1.DataSource = DevuelveDatos();
        DataGridViewComboBoxColumn d = new DataGridViewComboBoxColumn;
        d.DataSource = GetDatos();
        d.Name = "Inactivo";
        d.DisplayMember = "valor";
        d.ValueMember = "key";
        d.DataPropertyName = "Inact";
        DataGridView1.Columns.Add(d);
        this.DataGridView1.Columns("Inact").Visible = false;
    }

    Quedamos al pendiente de cualquier actualización o comentario de tu parte.

    Saludos Cordiales y feliz año.

    Gracias por usar los foros de MSDN.

    Pablo Rubio
     _____

    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. 

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.  

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.

    miércoles, 27 de diciembre de 2017 21:59
    Moderador