Foros del Web » Programación para mayores de 30 ;) » .NET »

Agregar una columna a un DataGridView en tiempo de ejecucion

Estas en el tema de Agregar una columna a un DataGridView en tiempo de ejecucion en el foro de .NET en Foros del Web. Hola Foro... Tengo una duda y quisiera por favor que me oriente... Resulta que tengo un DataGrid donde levanto cierta info ... cuando ejecuto el ...
  #1 (permalink)  
Antiguo 19/06/2009, 18:01
 
Fecha de Ingreso: febrero-2009
Mensajes: 101
Antigüedad: 15 años, 1 mes
Puntos: 0
Agregar una columna a un DataGridView en tiempo de ejecucion

Hola Foro...

Tengo una duda y quisiera por favor que me oriente...

Resulta que tengo un DataGrid donde levanto cierta info ... cuando ejecuto el programa se me muestra en el datagrid 3 columnas... pero me gustaria poder agregar una columna en tiempo de ejecucion que sea de tipo checkbox ... la agrego en tiempo de diseño ... pero me queda de primera y yo kiero que quede de ultima... ademas que trato de marcar el checkbox pero no me deja... no lo marca...

Estuve googleando... como hay muchas maneras de mostrar info en un DataGrid ninguna se ajusta a la manera como yo lo hago...

Aca les adjunto el código para que vean como monto la info en mi datagrid

Código:
Option Explicit On
Imports System.Data.SqlClient

Public Class VentanaCargarAlumnos
    'Declaracion de variable
    Dim myAdapter As SqlDataAdapter '
    '**********************************************
    Dim myTable As New DataTable 'la tabla donde cargare los datos para pasarselos al DataGridView
    '**********************************************
    Dim OrigendeDatos As Windows.Forms.BindingSource 'encapsulo el origen de datos de un form
    '**********************************************
    Dim SQL As String
   
Private Sub VentanaCargarAlumnos_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

SQL = "SELECT CedAlumno AS 'Cédula', NomAlumno AS 'Nombre', EspAlumno AS 'Especialidad' FROM ALUMNO"
    '**********************************************
OrigendeDatos = New Windows.Forms.BindingSource 'instanciando a la clase. creando una nueva instancia
        '*****************************************************************************************************
        myAdapter = New SqlDataAdapter(SQL, myConn) 'Crear un DataAdapter y 
        'pasarle el comando para traer los registros  . myConn es mi cadena de conexion
        '*****************************************************************************************************
        myAdapter.Fill(myTable) ' lleno la tabla con los registros que me generan myAdaptar
        '*****************************************************************************************************
        OrigendeDatos.DataSource = myTable 'Enlazar el DataTable al BindingSource
        '*****************************************************************************************************
        DataGridGrupo.DataSource = OrigendeDatos.DataSource 'Propiedades para el DataGridview

  End Sub
End Class
Saludos y Exitos

GRACIAS DE ANTEMANO...
  #2 (permalink)  
Antiguo 19/06/2009, 20:48
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 15 años, 10 meses
Puntos: 220
Respuesta: Agregar una columna a un DataGridView en tiempo de ejecucion

Bueno aca te dejo un ejemplo de como agregar una checkbox en la columna de la grilla

Código vb.net:
Ver original
  1. ' Antes de llenar la Grilla poner este codigo
  2. DataGridGrupo.Columns.Clear()
  3. Dim Obj as new DataGridViewColumn
  4. Dim Col as new DataGridViewCheckBoxColumn
  5. Obj = Col
  6. Obj.HeaderText="Estado" ' el texto que ira en la cabecera
  7. Obj.Name = "Estado" ' Nombre de la Columna de la Grilla
  8. Obj.Width = 50
  9. DataGridGrupo.Columns.add(Obj)
  10. DataGridGrupo.Columns(DataGridGrupo.Columns.Count - 1).DisplayIndex = 0 ' Es para que la columna sea la primera en la grilla
  11.  
  12. ' Luego esta propiedad para la grilla
  13.  
  14. DataGridGrupo.ReadOnly = false ' Esto para que toda la grilla sea editable
  15. DataGridGrupo.DataSource = Nothing ' al inicio no va ningun enlaze de datos
  16.  
  17. ' Aqui va tu codigo del load
  18. '''
  19. '''
  20. '''
  21. 'al final de ese codigo del load hacer este for
  22.  
  23. ' Este for es para que solo sea editable el checkbox de la grilla es decir poder hacerle click
  24. For Col As Integer = 0 To DataGridGrupo.Columns.Count - 1
  25.                         If Not Col = 0 Then
  26.                             DataGridGrupo.Columns(Col).ReadOnly = True
  27.                         End If
  28.                     Next
  29.  
  30. ' Ojo este codigo debe ir para que te funcione al hacer click en el checkbox de la grilla
  31.  
  32. Private Sub DataGridGrupo_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridGrupo.CellContentClick
  33.         If e.RowIndex < 0 Or Not e.ColumnIndex = 0 Then Exit Sub
  34.         If Convert.ToBoolean(DataGridGrupo.Rows(e.RowIndex).Cells(0).Value) Then
  35.             DataGridGrupo.Rows(e.RowIndex).Cells(0).Value = False
  36.         Else
  37.             DataGridGrupo.Rows(e.RowIndex).Cells(0).Value = True
  38.         End If
  39.     End Sub
  40.  
  41. ' el problema consiste en que si no pongo este codigo al hacer click en un checkbox de la grilla este no cambiara a true hasta que otro checkbox sea clickeado o se haga click en la celda de la grilla
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #3 (permalink)  
Antiguo 19/06/2009, 22:19
 
Fecha de Ingreso: febrero-2009
Mensajes: 101
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Agregar una columna a un DataGridView en tiempo de ejecucion

Hola Dradi7

Mil gracias por el codigo... funciono excelentemente!!!

Ahora tengo otra consulta que hacer sino es mucha molestia...

Resulta que en ese datagrid yo cargare info de los alunmos que no tengan un grupo asignado... entonces la idea de esta columna Checkbox ... es marcar los alumnos que voy a incluir en un grupo y asignarles en el IdGrupo (de la tabla alumno) el codigo del grupo al cual han sido agregados... y ademas contar cuantos CheckBox se marcaron para almacenar la cantidad de alumnos que haya en un grupo... Si me entiendes?¿

Yo a partir de tu codigo... que entendi muy bien... porque explicastes toda detalladamente ... voy a googlear ... porque aun no tengo definido como hacerlo... espero me puedas orientar ... y nuevamente mil gracias... Ya tenia rato buscando y no daba con la solucion...

Saludos y Exitos
  #4 (permalink)  
Antiguo 20/06/2009, 00:12
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 15 años, 10 meses
Puntos: 220
Respuesta: Agregar una columna a un DataGridView en tiempo de ejecucion

para recorrer y saber los que estan marcados has esto en un boton por ejemplo

Código vb.net:
Ver original
  1. Dim Cont as Integer = 0
  2. for each Row as DataGridViewRow in DataGridGrupo.rows
  3.       if Convert.toBoolean(Row.Cells(0).value) = true ' Si chekee una fila de la grilla
  4.          Cont += 1
  5.          ' aqui tu procedimiento para guardar
  6.       end if
  7. next
  8.  
  9. ' Al final obtienes la cantidad de registros marcados
  10. msgbox(Cont)
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #5 (permalink)  
Antiguo 20/06/2009, 14:23
 
Fecha de Ingreso: febrero-2009
Mensajes: 101
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Agregar una columna a un DataGridView en tiempo de ejecucion

Hola Dradi7

Muchas gracias, todo lo que me haz dado me ha servido de maravilla!!! Eres muy bueno ... Como ultima consulta queria preguntarle... y tambien pedirte disculpa por la molestia... Como puedo hacer para que al cargar el datagrid en la columna de CheckBox me salga marcado de acuerdo a cierta condicion...

Espero que me entiendas!!!

Saludos y Exito
  #6 (permalink)  
Antiguo 20/06/2009, 14:49
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 15 años, 10 meses
Puntos: 220
Respuesta: Agregar una columna a un DataGridView en tiempo de ejecucion

digamos que en la grilla tengas una columna estado de modo oculta por ejemplo

DataGridGrupo.columns(5).visible=false ' aqui ocultas esta columna que nos servira para marcar los checks supongo que 5 sea la ultima posicion si no sabes entonces pon en vez de 5 DataGridGrupo.columns.count - 1

luego del codigo para poner readonly has esto

Código vb.net:
Ver original
  1. for each Row as DataGridViewRow in DataGridGrupo.Rows
  2.  
  3.             if Row.cells(5).value = 1 then  ' suponiendo que sea la ultima columna
  4.                Row.cells(0).value = true ' suponiendo que sea la columna del check
  5.             else
  6.               Row.cells(0).value = false
  7.             end if
  8. next
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #7 (permalink)  
Antiguo 20/06/2009, 17:13
 
Fecha de Ingreso: febrero-2009
Mensajes: 101
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Agregar una columna a un DataGridView en tiempo de ejecucion

Hola Dradi7

Yo otra vez...

Te cuento... estoy un poco enredada!!!

Lo que quiero hacer es lo siguiente... Cuando el usuario selecciona nuevo grupo y ejecuto el insert ... yo muestro una ventana donde cargo en mi datagrid los alumnos que no tiene grupos asignados... Ok?¿ Y luego cuando digo cargar los alumnos en ese grupo... hago el chekeo de los checkbox como me explicastes... ok!!! Aca funciona bien...

Ahora... cuando el usuario quiere modificar ... mi idea era mostrar un boton que diga Agregar/Eliminar Alumnos del grupo ... Ok... y al hacer click alli... queria mostrar en el datagrid los alumnos que pertenezcan a ese grupo pero con su chekcbox marcado para hacer el efecto de que este alumno pertenece a ese grupo y tambien mostrar en ese momento los alumnios que no tengan grupos asignados... para entonces permitir agregar... y en el boton de aceptar ... asignar a los alumnos que tengo el checkbox marcados el idGrupo y los que no tengo el chekbox marcado asignarle que no tienen grupo...

Entonces tengo algo asi en mi codigo:

Código:
 If Opcion = 1 Then 'esto es para efecto de saber si va ingresar
            Id = VentanaOpcionGrupo.TextId.Text 'toma el codigo del grupo nuevo
            SQL = "SELECT CedAlumno AS 'Cédula', NomAlumno AS 'Nombre', EspAlumno AS 'Especialidad' FROM ALUMNO WHERE IdGrupo='00'"
        Else ' opcion 2 para modificar
            Id = VentanaOpcionGrupo.LabelId.Text ' toma el codigo del grupo existente
            SQL = "SELECT CedAlumno AS 'Cédula', NomAlumno AS 'Nombre', EspAlumno AS 'Especialidad' FROM ALUMNO WHERE IdGrupo='" & Id & "' OR IdGrupo='00'"
        End If
        '****************************
        'datagridCargarAlumno.
        Call BD.CargarDataGrid(OrigendeDatos, myAdapter, myTable, DataGridCargarAlumno, SQL) 'LLAMAR AL MODULO PARA CARGAR EL DATAGRID
        '*******************************************************************************************************************************
        'cargar los alumnos que pertenezcan a un grupo. Para cuando seleccionemos modificar
        IdModificar = VentanaOpcionGrupo.LabelId.Text 'codigo del proyecto ' aca tomo el codigo del grupo para saber cual es...

        '*********************************************************************************************
        ' Este for es para que solo sea editable el checkbox de la grilla es decir poder hacerle click
        For Col As Integer = 0 To DataGridCargarAlumno.Columns.Count - 1
            If Not Col = 0 Then
                DataGridCargarAlumno.Columns(Col).ReadOnly = True
            End If
        Next
        '*******************************************************************

        For Each Row As DataGridViewRow In DataGridCargarAlumno.Rows
            If Convert.ToString(Row.Cells(4).Value) = IdModificar  Then  '  aca pregunto si lo que esta en el idGrupo de alumno es igual a lo que tiene IdModificar, osea si pertenece a este grupo 
                Row.Cells(0).Value = True  ' si pertenece activo el checkbox... 
            Else

                Row.Cells(0).Value = False 
            End If
        Next
Pero no estoy seguro si asi este bien .... marcar el checkbox asi...

Please me podrias hechar la mano... ?¿ Claro mas de lo que ya lo haz hecho... esto lo hago en el evento load del form

Saludos y Exito
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:28.