none
Llenar datagrid con combobox (kA)

    Question

  • Hola quisiera saber como puedo llenar un DataGridView con unos combobox, que al momento de seleccuinar opciones del combobox estas me arrojen informacion en un grid.. mi codigo es el siguiente:

    Imports

    System.Data.SqlClient

    Public

    Class Form1

    Dim conexion As New SqlConnection()

    Dim comando As New SqlCommand()

    Dim dr As SqlDataReader

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    conexion.ConnectionString =

    "Data Source=RICARDO-PC\SQL;Initial Catalog=Examen;Integrated Security=True"

    'TODO: esta línea de código carga datos en la tabla 'ExamenDataSet1.Materia' Puede moverla o quitarla según sea necesario.

    Me.MateriaTableAdapter.Fill(Me.ExamenDataSet1.Materia)

    'TODO: esta línea de código carga datos en la tabla 'ExamenDataSet.Profesor' Puede moverla o quitarla según sea necesario.

    Me.ProfesorTableAdapter.Fill(Me.ExamenDataSet.Profesor)

    End Sub

    Private Sub ComboBox1_SelectedIndexChanged_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged

    Try

    DataGridView1.Rows.Clear()

    Me.MateriaTableAdapter.FillBy1(Me.ExamenDataSet1.Materia, CType(ComboBox1.SelectedValue, Integer))

    Catch ex As System.Exception

    System.Windows.Forms.

    MessageBox.Show(ex.Message)

    End Try

    End Sub

    Private Sub ComboBox2_SelectionChangeCommitted(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox2.SelectionChangeCommitted

    comando.Connection = conexion

    comando.CommandType =

    CommandType.Text

    comando.CommandText =

    "SELECT Alumno.Nombre as nombre, Grupo_detalle.Calificacion as calif FROM Alumno INNER JOIN Grupo_detalle ON Alumno.Id_alumno = Grupo_detalle.Id_alumno INNER JOIN Grupo ON Grupo_detalle.Id_grupo = Grupo.Id_grupo INNER JOIN Materia ON Grupo.Id_materia = Materia.Id_materia where Grupo.Id_materia=" & ComboBox2.SelectedValue

    conexion.Open()

    dr = comando.ExecuteReader()

    DataGridView1.Rows.Clear()

    While dr.Read()

    Dim i As Integer = DataGridView1.Rows.Add()

    DataGridView1.Rows(i).Cells(

    "Nombre").Value = dr.GetString(dr.GetOrdinal("nombre")).ToString()

    DataGridView1.Rows(i).Cells(

    "Calificacion").Value = dr.GetDecimal(dr.GetOrdinal("calif")).ToString()

    End While

    conexion.Close()

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    Dim i As Integer = 0 'variable contador del while

    Dim s As Double 'suma de la columna de las calificaciones

    Dim rs As Integer ' total de alumnos

    Dim res As Double 'resultado

    While DataGridView1.RowCount > i 'mientras la cuenta del total de alumnos( osease el numero de renglones menos 1)

    Dim c As Double = Convert.ToDouble(DataGridView1.Rows(i).Cells(1).Value)

    s = s + c

    i += 1

    End While

    rs = DataGridView1.RowCount

    res = s / rs

    Label1.Text = Format(res)

    comando.Connection = conexion

    comando.CommandType =

    CommandType.Text

    comando.CommandText =

    "UPDATE Grupo SET Promedio=" & "'" & res & "'" & " where Id_grupo=" & ComboBox2.SelectedValue

    conexion.Open()

    dr = comando.ExecuteReader()

    conexion.Close()

    End Sub

    End

    Class

    Monday, December 10, 2012 6:09 AM

Answers

  • Hola ! , bueno ante todo por buenas practicas no es tan recomendable que hagas esto 

    comando.CommandText =

    "SELECT Alumno.Nombre as nombre, Grupo_detalle.Calificacion as calif FROM Alumno INNER JOIN Grupo_detalle ON Alumno.Id_alumno = Grupo_detalle.Id_alumno INNER JOIN Grupo ON Grupo_detalle.Id_grupo = Grupo.Id_grupo INNER JOIN Materia ON Grupo.Id_materia = Materia.Id_materia where Grupo.Id_materia=" & ComboBox2.SelectedValue

    usa procedimientos almacenados con parametros, lo segundo que puedes utilizar es el famoso Linq que te permite hacer (Insert, Update, Delete, Querys,...) ahora si tu quieres seleccionar y llenar un grid desde un combo es sencillo, sólo necesitas capturar el value del combo : 

    ejemplo, en el evento SelectedindexChanged del combo (cbo_datos)

    /*

    Aqui llamas a tu procedimiento parametrizado, supongamos

    Create Proc usp_Lista_cliente

    @cod char(5)

    as

    select * from customers where customerid=@cod

    return

    go

    */

    /*

    Creamos un procedimiento en nuestro Form

    sub listar(string codigo) as datatable

    sqldataadapter adaptador=new sqldataadapter("usp_lista_cliente");

    sqlcomand comand=new sqlcomand(adaptador)

    comand.comandtype=comandtype.storeprocedure

    comand.parameters.addwithvalue("@cod",codigo)

    datatable tabla=new datatable()

    adaptador.fill(tabla)

    return tabla

    end sub

    */

    /*

    en el evento del combo (SelectedIndexChanged......"es cuando le das doble click al combobox si mal no recuerdo ^^ )

    Datagridview.datasource=listar(combobox1.selectedvalue)

    */

    /--------------------- no recuerdo muy bien Visual Basic, pero espero te sirva :) ------------------/


    Friday, January 04, 2013 4:12 PM