none
DataGridView con columna que muestre el valor en lugar del codigo de la tabla de la que depende RRS feed

  • Pregunta

  • Buenos días,

    Tengo un winform en el que aparecen los datos de una tabla en un data grid view.

    Una de las columnas de esta tabla que se muestra contiene un código que corresponde a otra tabla en la que ya contiene el resto de datos y entre ellos el nombre de este valor.

    El data grid view lo tengo para visualizar y cuando haces clic en alguna de las filas, la información pasa a los controles correspondientes:

    • textbox
    • checkbox
    • combobox

    La información que tengo ahora mismo en el data grid view para esta columna en el combobox es el código que hace referencia a otra tabla auxiliar, y lo que quisiera mostrar es el nombre que le corresponde con respecto a esa tabla auxiliar, y que el usuario quede abstraido de los códigos que no le ayudan en nada.

    El contenido del combobox cuando se entra en modo añadir / modificar datos, ya se llena a traves de una consulta de la base de datos.

    La cuestión que tengo en este momento, es como asociar en modo código la columna que corresponde a los datos auxiliares:

    • Para que se muestren en el data grid view
    • Para cuando se entra en modo edición, identicar que valor adoptar en el combo box correspondiente

    Supongo que para quien sepa hacerlo, no supondra excesivo problema, pero en mi caso no tengo claro ahora mismo, como abordarlo.

    Desde la clase del winform ya dispongo de una colección del tipo Hastable para manejar estos datos que ya se obtienen desde la base de datos.

    Se agradecen los comentarios.

    Saludos,

    Toni Gómez


    lunes, 1 de enero de 2018 12:54

Respuestas

  • Hola Tonixgm

    De acuerdo a tu consulta, ¿podrías por favor colocar tu form y el código del mismo? ya que es mas sencillo para el resto de los colaboradores en trabajar en una solución pronta.

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

    Saludos Cordiales.

    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.

    lunes, 1 de enero de 2018 19:50
    Moderador

Todas las respuestas

  • Hola Tonixgm

    De acuerdo a tu consulta, ¿podrías por favor colocar tu form y el código del mismo? ya que es mas sencillo para el resto de los colaboradores en trabajar en una solución pronta.

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

    Saludos Cordiales.

    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.

    lunes, 1 de enero de 2018 19:50
    Moderador
  • Hola,

    El winform en el que se carga el data grid view, así como el resto de los controles:

        public partial class UsuarioWindows : Form
        {
            private Hashtable ListaDepartamento = new Hashtable();
    
            public UsuarioWindows()
            {
                InitializeComponent();
            }
    
            private static UsuarioWindows _instancia;
    
            public static UsuarioWindows GetInstancia()
            {
                if (_instancia == null)
                {
                    _instancia = new UsuarioWindows();
                }
                return _instancia;
            }
    
            private void UsuarioWindows_FormClosing(object sender, FormClosingEventArgs e)
            {
                _instancia = null;
            }
    
            private void UsuarioWindows_Load(object sender, EventArgs e)
            {
                // Obtener la información de la tabla Usuarios Windows
                TAREASDataSet dts = new TAREASDataSet();
                TAREASDataSetTableAdapters.UsuariosTableAdapter Adaptador = new TAREASDataSetTableAdapters.UsuariosTableAdapter();
                Adaptador.Fill(dts.Usuarios);
                dgvUsuarioWindows.DataSource = dts.Usuarios;
                // Prepara columnas del DataGridView
                dgvUsuarioWindows.Columns[0].Visible = false;
                dgvUsuarioWindows.Columns[1].Width = 100;
                dgvUsuarioWindows.Columns[1].HeaderText = "Windows";
                dgvUsuarioWindows.Columns[2].Width = 100;
                dgvUsuarioWindows.Columns[3].Width = 100;
                dgvUsuarioWindows.Columns[3].HeaderText = "Departamento";
                dgvUsuarioWindows.Columns[4].Width = 100;
                dgvUsuarioWindows.Columns[4].HeaderText = "Resp.Dpto.";
                dgvUsuarioWindows.Columns[5].Width = 115;
                dgvUsuarioWindows.Columns[5].HeaderText = "Resp. Sub-Dpto.";
                dgvUsuarioWindows.Columns[6].Width = 115;
                dgvUsuarioWindows.Columns[6].HeaderText = "Resp. Sub-Dpto.2";
                dgvUsuarioWindows.Columns[7].Width = 35;
    
                ComboDepartamento();
                            
            }
    
            private void dgvUsuarioWindows_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
            {
                // Habilitar los TextBox
                txtWindows.Enabled = true;
                txtNombre.Enabled = true;
                txtDepartamento.Enabled = true;
                txtRespDpto.Enabled = true;
                txtRespSubDpto.Enabled = true;
                txtRespSubDpto2.Enabled = true;
                txtBaja.Enabled = true;
                // Habilitar los Botones
                cmbNuevo.Enabled = false;
                cmbGuardar.Enabled = true;
                cmbBuscar.Enabled = false;
                cmbAplicarBusqueda.Enabled = true;
                cmbVaciar.Enabled = true;
                // Llenar con los datos del dgv con la fila seleccionada
                txtWindows.Text = dgvUsuarioWindows.CurrentRow.Cells[1].Value.ToString();
                // De los datos que hay, se refresca la lista Departamento
                txtNombre.Text = dgvUsuarioWindows.CurrentRow.Cells[2].Value.ToString();
                txtDepartamento.Text = dgvUsuarioWindows.CurrentRow.Cells[3].Value.ToString();
                txtRespDpto.Checked = dgvUsuarioWindows.CurrentRow.Cells[4].Value.ToString() == "S" ? txtRespDpto.Checked = true : txtRespDpto.Checked = false;
                txtRespSubDpto.Checked = dgvUsuarioWindows.CurrentRow.Cells[5].Value.ToString() == "S" ? txtRespSubDpto.Checked = true : txtRespSubDpto.Checked = false;
                txtRespSubDpto2.Checked = dgvUsuarioWindows.CurrentRow.Cells[6].Value.ToString() == "S" ? txtRespSubDpto2.Checked = true : txtRespSubDpto2.Checked = false;
                txtBaja.Text = dgvUsuarioWindows.CurrentRow.Cells[7].Value.ToString() == "S" ? txtBaja.Text = "Si" : txtBaja.Text = "No";
                //txtBaja.Text = dgvUsuarioWindows.CurrentRow.Cells[7].Value.ToString();
            }
    
            private void cmbVaciar_Click(object sender, EventArgs e)
            {
                // Desabilitar los TextBox
                txtWindows.Enabled = false;
                txtNombre.Enabled = false;
                txtDepartamento.Enabled = false;
                txtRespDpto.Enabled = false;
                txtRespSubDpto.Enabled = false;
                txtRespSubDpto2.Enabled = false;
                txtBaja.Enabled = false;
                // Vaciar los TextBox
                txtWindows.Text = "";
                txtNombre.Text = "";
                txtDepartamento.Text = "";
                txtRespDpto.Checked = false;
                txtRespSubDpto.Checked = false;
                txtRespSubDpto2.Checked = false;
                txtBaja.Text = "";
                // Habilitar los Botones
                cmbNuevo.Enabled = true;
                cmbGuardar.Enabled = false;
                cmbBuscar.Enabled = true;
                cmbAplicarBusqueda.Enabled = false;
                cmbVaciar.Enabled = false;
            }
    
            private void ComboDepartamento()
            {
                ListaDepartamento = LlenarCombo.Llenarcombobox("Departamento", 'N');
                ListaDepartamento.Clear();
                foreach (DictionaryEntry registro in ListaDepartamento)
                {
                    txtDepartamento.Items.Add(registro.Value);
                }
                txtDepartamento.Sorted = true;
    
            }
    
        }
    

    Espero sea de ayuda para facilitar la respuesta.

    La idea es que la columna 3 muestre el valor de la tabla auxiliar, en lugar del código que aparece en este momento, y luego hacer doble clic y entrar en modo edición al subir los valores a los controles correspondientes del winforms (no se modifica el contenido directamente desde el data grid view), aplicar el valor correspondiente al combo box, en lugar del código equivalente (aprovechando que tenemos el hashtable que mantiene la colección de las equivalencias).

    Gracias !!!

    lunes, 1 de enero de 2018 20:38
  • hola

    >>ya dispongo de una colección del tipo Hastable para manejar estos datos

    porque un Hastable ? es un pesimo tipo de dato para realizar esto

    se supone que si tienes codigo y descripciones deberias contar con una clase con propiedades las cuales bindear al combo de la celda del grid

    analiza como asigno los datos al combo en el articulo

    [DataGridView] – Parte 4 - Uso del DataGridViewComboBoxColumn

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 2 de enero de 2018 12:26
  • Hola Leandro,

    La cuestión es que tengo la clase para toda la tabla completa, y no me habia planteado hacer otra clase solo con los 2 campos que quiere disponer en este caso, sera cuestión de valorar un poco quizas.

    Reviso la información sobre el DataGridView ... a ver si salgo del atasco.

    Gracias!!

    martes, 2 de enero de 2018 18:36