none
enlazar un combobox a un datagridview

    Pregunta

  • Tengo una pregunta muy simple, talvez tambien ya ha sido contestada varias veces pero no he logrado tener la respuesta que necesito, y es que tambien me estoy iniciando en este lenguaje. El asunto es este, he hecho una aplicacion con windowsforms de C# y tengo form de profesores, que a su vez va a contener un datagridview de los asistentes y a la par un combobox con los asistentes disponibles, ya hice la agregacion y me aparecen en el combobox, los asistentes que estan disponibles. Mi pregunta es como hago para agregar el selecteditem por asi decirlo del combox al datagridview que solo contiene una columna con el nombre de "mis asistentes", tambien como enlazar este datagridview al combobox de asistentes y agregar el asistente al datagridview con un boton de agregar, para enlazarlo he visto opciones con algo de los databindings o tambien datasets pero no se como hacerlo y tampoco se si esto sera lo mejor para lo que tengo que hacer. Tambien ocupo validar que no puede estar 2 veces el mismo nombre del asistente en el datagrid, les agradeceria mucho de antemano por su ayuda!
    martes, 27 de octubre de 2009 18:02

Respuestas

  • Hola:

    Como no me entero bien de lo que deseas hacer, me voy a limitar a ponerte un ejemplo para mostrar en un control DataGridView los datos de una tabla de Clientes, y a la misma vez configurar un control ComboBox que nos muestre los nombres de los clientes, pero que nos devuelva el identificador correspondiente al cliente seleccionado.

    Inicia un nuevo proyecto de C#, inserta en el formulario de inicio un control DataGridView y un control ComboBox, copia/pega el código del ejemplo, modifica la cadena de conexión para que se adapte a tu base de datos SQL Server, y pulsa F5 para ejecutar el proyecto.

            private void Form1_Load(object sender, EventArgs e)
            {
                // Vamos a mostrar en el control DataGridView la tabla Clientes
                //
                using (SqlConnection cnn = new SqlConnection( 
                    "Data Source=(local);Initial Catalog=Prueba;" +
                    "Integrated Security=SSPI"))
                {
                    // Creamos la consulta SQL de selección
                    string sql = "SELECT IdCliente, Nombre FROM Clientes";
    
                    // Creamos el adaptador de datos
                    SqlDataAdapter da = new SqlDataAdapter(sql, cnn);
    
                    // Creamos el objeto DataTable
                    DataTable dt = new DataTable("Clientes");
    
                    // Rellenamos el objeto DataTable
                    da.Fill(dt);
    
                    // Enlazamos el control DataGridView con el objeto DataTable
                    dataGridView1.DataSource = dt;
    
                    // Configuramos el control ComboBox
                    comboBox1.DataSource = dt;
                    comboBox1.DisplayMember = "Nombre";
                    comboBox1.ValueMember = "IdCliente";
    
                    // Instalamos el controlador para el evento SelectedValueChanged
                    // del control ComboBox.
                    this.comboBox1.SelectedValueChanged += 
                        new System.EventHandler(this.ComboBoxOnSelectedValueChanged);
                    
                }
    
            }
    
            private void ComboBoxOnSelectedValueChanged(object sender, EventArgs e)
            {
                // Referenciamos al control ComboBox
                //
                ComboBox cb = (ComboBox)sender;
    
                // Obtenemos el valor de la propiedad SelectedValue, que
                // nos devolverá el identificador del cliente seleccionado.
                //
                Text = cb.SelectedValue.ToString();
    
            }
    


    Como los dos controles están enlazados al mismo objeto DataTable, cada vez que selecciones un registro en el control DataGridView, te aparecerá en el control ComboBox el nombre del cliente, y viceversa; si seleccionas cualquier nombre en el control ComboBox, automáticamente se seleccionará el Cliente en el control DataGridView.

    El procedimiento ComboBoxOnSelectedValueChanged, lo único que hace es mostrar en el título del formulario el número de identificación del cliente seleccionado cada vez que selecciones un cliente, desde el control DataGridView o desde el control ComboBox, ya que éste es el campo de la tabla que le hemos indicado a la propiedad ValueMember del control ComboBox.

    Estudia el ejemplo y adáptalo a tus necesidades.

    Un saludo






    Enrique Martínez [MS MVP - VB]
    miércoles, 28 de octubre de 2009 14:52

Todas las respuestas

  • Bueno el datagridview debe estar ligado a una fuente de datos que debe ser dataTable o dataset(el cual contiene datatables), el datatable tiene la funcion newrow que te devuelve un datarow(ej: fila) con la estructura de la fila, solo agrega el valor en la columna [0] y luego pones datatable.rows.add(fila).

    Puedes trabajar con el evento selectedindexchanged del combobox para que inserte el  seleccionado.

    En cuanto a validar si ya está ingresado, el datatable posee la funcion select el cual funciona parecido a sql.

    Deberias revisar el tutorial del datagridview de enlace a datos que viene en la documentación.
    miércoles, 28 de octubre de 2009 2:48
  • Hola:

    Como no me entero bien de lo que deseas hacer, me voy a limitar a ponerte un ejemplo para mostrar en un control DataGridView los datos de una tabla de Clientes, y a la misma vez configurar un control ComboBox que nos muestre los nombres de los clientes, pero que nos devuelva el identificador correspondiente al cliente seleccionado.

    Inicia un nuevo proyecto de C#, inserta en el formulario de inicio un control DataGridView y un control ComboBox, copia/pega el código del ejemplo, modifica la cadena de conexión para que se adapte a tu base de datos SQL Server, y pulsa F5 para ejecutar el proyecto.

            private void Form1_Load(object sender, EventArgs e)
            {
                // Vamos a mostrar en el control DataGridView la tabla Clientes
                //
                using (SqlConnection cnn = new SqlConnection( 
                    "Data Source=(local);Initial Catalog=Prueba;" +
                    "Integrated Security=SSPI"))
                {
                    // Creamos la consulta SQL de selección
                    string sql = "SELECT IdCliente, Nombre FROM Clientes";
    
                    // Creamos el adaptador de datos
                    SqlDataAdapter da = new SqlDataAdapter(sql, cnn);
    
                    // Creamos el objeto DataTable
                    DataTable dt = new DataTable("Clientes");
    
                    // Rellenamos el objeto DataTable
                    da.Fill(dt);
    
                    // Enlazamos el control DataGridView con el objeto DataTable
                    dataGridView1.DataSource = dt;
    
                    // Configuramos el control ComboBox
                    comboBox1.DataSource = dt;
                    comboBox1.DisplayMember = "Nombre";
                    comboBox1.ValueMember = "IdCliente";
    
                    // Instalamos el controlador para el evento SelectedValueChanged
                    // del control ComboBox.
                    this.comboBox1.SelectedValueChanged += 
                        new System.EventHandler(this.ComboBoxOnSelectedValueChanged);
                    
                }
    
            }
    
            private void ComboBoxOnSelectedValueChanged(object sender, EventArgs e)
            {
                // Referenciamos al control ComboBox
                //
                ComboBox cb = (ComboBox)sender;
    
                // Obtenemos el valor de la propiedad SelectedValue, que
                // nos devolverá el identificador del cliente seleccionado.
                //
                Text = cb.SelectedValue.ToString();
    
            }
    


    Como los dos controles están enlazados al mismo objeto DataTable, cada vez que selecciones un registro en el control DataGridView, te aparecerá en el control ComboBox el nombre del cliente, y viceversa; si seleccionas cualquier nombre en el control ComboBox, automáticamente se seleccionará el Cliente en el control DataGridView.

    El procedimiento ComboBoxOnSelectedValueChanged, lo único que hace es mostrar en el título del formulario el número de identificación del cliente seleccionado cada vez que selecciones un cliente, desde el control DataGridView o desde el control ComboBox, ya que éste es el campo de la tabla que le hemos indicado a la propiedad ValueMember del control ComboBox.

    Estudia el ejemplo y adáptalo a tus necesidades.

    Un saludo






    Enrique Martínez [MS MVP - VB]
    miércoles, 28 de octubre de 2009 14:52