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

Marcar un CheckBox de un DataGridView en VB.Net

Estas en el tema de Marcar un CheckBox de un DataGridView en VB.Net en el foro de .NET en Foros del Web. Hola Foro... me hechan una mano?¿ Ocurre lo siguiente... en tiempo de ejecucion creo una columna de tipo checkbox para mi DataGrid, el cual ademas ...
  #1 (permalink)  
Antiguo 22/06/2009, 19:47
 
Fecha de Ingreso: febrero-2009
Mensajes: 101
Antigüedad: 15 años, 2 meses
Puntos: 0
Marcar un CheckBox de un DataGridView en VB.Net

Hola Foro... me hechan una mano?¿

Ocurre lo siguiente... en tiempo de ejecucion creo una columna de tipo checkbox para mi DataGrid, el cual ademas le agrego ciertos datos de una bd... mi idea es que cuando cargue este DataGrid que algunas checkbox se marque si cumplen con cierta condicion, esto es lo que basicamente hago:

Creo la columna tipo checkbox... la agrego al datagrid... Cargo el DataGrid... Hago editable el datagrid para poder marcar el checkbox... y todo funciona bien... pero la cuestion es que cuando intento que al cargar el datagrid aparezcan ciertas filas ya marcadas no lo hace:

Este es el codigo que uso para implementarlo:

For Each Row As DataGridViewRow In DataGridCargarAlumno.Rows
If Convert.ToString(Row.Cells(4).Value) = IdModificar Then
Row.Cells(0).Value = True
Row.Cells(1).Value = "hola!!!"
Else
Row.Cells(0).Value = False
End If
Next

Recorro el Datagrid ...pregunto que si el contenido de la columna 4 es igual al valor que toma la variable IdModificar... si es asi hago el Row.Cells(0). Value = true... es decir que marque el checbox de la columna 0 , la otra fila era para probar... y de hecho esto si lo hace... cuando lo corro las filas que cumplen con la condicion cambian el contenido de su columna 2 a "Hola!!!" Ahora no entiendo porque no me funciona!!! Podrias hecharme una mano...

Saludos y Exito

Gracias a Dradi7 quien me estuvo ayudando... "Gracias Dradi7"
  #2 (permalink)  
Antiguo 22/06/2009, 20:07
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: Marcar un CheckBox de un DataGridView en VB.Net

solo una pregunta has hecho la prueba de poner un boton por ejemplo y hacer un for each sobre la celda uno para ver que valores te devuelven de repente la columna check no es la primera columna

Ejm:

en un boton de prueba has esto

For Each Row As DataGridViewRow In DataGridCargarAlumno.Rows
msgbox(Row.cells(0).value.toString())
Next
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #3 (permalink)  
Antiguo 22/06/2009, 22:10
 
Fecha de Ingreso: febrero-2009
Mensajes: 101
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: Marcar un CheckBox de un DataGridView en VB.Net

Cita:
Iniciado por Dradi7 Ver Mensaje
solo una pregunta has hecho la prueba de poner un boton por ejemplo y hacer un for each sobre la celda uno para ver que valores te devuelven de repente la columna check no es la primera columna

Ejm:

en un boton de prueba has esto

For Each Row As DataGridViewRow In DataGridCargarAlumno.Rows
msgbox(Row.cells(0).value.toString())
Next
Yo creo que si es sabes!!! porque recuerdas que me distes la forma de colocar la columna de primera!!!! Y lo curioso del caso es que cuando yo uso un MsgBox () para ver los valores de las variables... en ese momento si me los marca... pero luego cuando se acaban los MsgBox () lo desmarca todo... Yo estuve posteando en otra pagina que se llama TodoExperto y la persona que me respondi me dijo que estaba bien la forma de como lo estaba haciendo... y me sugirio que aplicar algo mas... que basicamente era lo mismo... pero que lo probara!!! y asi lo hice:

Dim variable As String
MsgBox("Id del Grupo Existente= " & IdGrupo)
For i As Integer = 0 To Me.DataGridCargarAlumno.Rows.Count - 1
variable = DataGridCargarAlumno.Rows(i).Cells(4).Value
MsgBox("variable= " & variable)
If variable = IdGrupo Then
DataGridCargarAlumno.Rows(i).Cells(0).Value = True
' MsgBox(DataGridCargarAlumno.Rows(i).Cells(0).Value )
Else
DataGridCargarAlumno.Rows(i).Cells(0).Value = False
'MsgBox(DataGridCargarAlumno.Rows(i).Cells(0).Valu e)
End If
Next

el uso de la variable fue mi idea... él me recomendo lo de las filas y columnas!!!

es basicamente lo mismo... solo que use una variable a ver si funcionaba... pero!!! y ocurre lo que te comente cuando envio los MsgBox me los marca... pero cuando se terminan los MsgBox se desmarcan.... De verdad me tiene depre todo... No se porque no kiere hacerme caso... igualmente tomare tu sugerencia!!! y gracias nuevamente por tomarte la molestia de responderme!!!! De verdad!!!

Saludos y Exito
  #4 (permalink)  
Antiguo 22/06/2009, 22:15
 
Fecha de Ingreso: enero-2007
Ubicación: Tingo María - Perú
Mensajes: 399
Antigüedad: 17 años, 3 meses
Puntos: 13
Respuesta: Marcar un CheckBox de un DataGridView en VB.Net

Cita:
Iniciado por fiorella3247 Ver Mensaje
cuando envio los MsgBox me los marca... pero cuando se terminan los MsgBox se desmarcan....
Quizas sea porque luego de los msgBoxs estas cargando nuevamente los datos y por eso es que se desmarcan, revisa que codigo se ejecuta luego de los msgs ,
pero si se hace tan complicado , porque no retornas ese valor desde tu consulta sql, ademas ese bucle consume recursos innecesarios ya que con una consulta mas trabajada podrias eviatarte todo eso (Claro siempre en cuando los Checks de la columna sean de solo lectura) .
__________________
Vivir para ser buenos y ser buenos para servir mejor.
  #5 (permalink)  
Antiguo 22/06/2009, 22:22
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: Marcar un CheckBox de un DataGridView en VB.Net

puedes poner tu codigo para poder como estas haciendolo
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #6 (permalink)  
Antiguo 23/06/2009, 06:36
 
Fecha de Ingreso: febrero-2009
Mensajes: 101
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: Marcar un CheckBox de un DataGridView en VB.Net

Cita:
Iniciado por Dradi7 Ver Mensaje
puedes poner tu codigo para poder como estas haciendolo
Hi Dradi7 gracias !!!...
Aca te colocó el código que uso en el evento Load() del form VentanaCargarAlumnos

Private Sub VentanaCargarAlumnos_Load(ByVal sender ...) Handles MyBase.Load
'AjustarCeldas = True
Me.MdiParent = VentanaPrincipal 'Formulario MDI
'***********************************************
DataGridCargarAlumno.Columns.Clear()
'*****************************************
Call BD.conectarBD() 'LLAMAR AL MODULO PARA CONECTAR LA BD
'************************************************
'CREACION DE LA COLUMNA CON EL CHECKBOX
Obj = Col
Obj.HeaderText = "Estado" ' el texto que ira en la cabecera
Obj.Name = "Estado" ' Nombre de la Columna de la Grilla
Obj.Width = 50
DataGridCargarAlumno.Columns.Add(Obj)
DataGridCargarAlumno.Columns(DataGridCargarAlumno. Columns.Count - 1).DisplayIndex = 0
' Es para que la columna sea la primera en la grilla
DataGridCargarAlumno.ReadOnly = False ' Esto para que toda la grilla sea editable
DataGridCargarAlumno.DataSource = Nothing ' al inicio no va ningun enlaze de datos
'***********************************************

If Opcion = 1 Then
Id = VentanaOpcionGrupo.TextId.Text 'toma el codigo del grupo nuevo
SQL = "SELECT CedAlumno AS 'Cédula', NomAlumno AS 'Nombre', EspAlumno AS 'Especialidad', ALUMNO.IdGrupo AS 'Código Grupo' FROM ALUMNO WHERE IdGrupo='00'"
'el grupo 00 es grupo especial que se le asigna a los alumnos al cargarlos por primera vez.
'los selecciono a ellos para seleccionar justamente los que no tengan grupos para asignarles el grupo que estoy creando.
Else
Id = VentanaOpcionGrupo.LabelId.Text ' toma el codigo del grupo existente
SQL = "SELECT CedAlumno AS 'Cédula', NomAlumno AS 'Nombre', EspAlumno AS 'Especialidad', ALUMNO.IdGrupo AS 'Código Grupo' FROM GRUPO inner join ALUMNO ON GRUPO.IdGrupo=ALUMNO.IdGrupo WHERE GRUPO.IdGrupo='" & Id & "' OR ALUMNO.IdGrupo='00'"
'aca cargo los alumnos que no tienen grupo
'y ademas los alumnos que pertenecen a el grupo que voy a modificar
End If
'****************************
'datagridCargarAlumno
Call BD.CargarDataGrid(OrigendeDatos, myAdapter, myTable, DataGridCargarAlumno, SQL) 'LLAMAR AL MODULO PARA CARGAR EL DATAGRID
'************************************************* ************************************************** ****************************
'************************************************* ********************************************
' 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) = IdGrupo Then ' suponiendo que sea la ultima columna
Row.Cells(0).Value = True ' suponiendo que sea la columna del check
'Row.Cells(1).Value = "hola!!!"
Else
Row.Cells(0).Value = False
End If
' Label1.Text = Convert.ToString(Row.Cells(4).Value)
Next

'******* ESTO ES LO QUE ESTUVE TRATANDO DE HACER PARA VARIAR ********
'Dim variable As String
''MsgBox("Id del Grupo Existente= " & IdGrupo)
'For i As Integer = 0 To Me.DataGridCargarAlumno.Rows.Count - 1
' variable = DataGridCargarAlumno.Rows(i).Cells(4).Value
' ' MsgBox("variable= " & variable)
' If variable = IdGrupo Then
' DataGridCargarAlumno.Rows(i).Cells(0).Value = True
' ' MsgBox(DataGridCargarAlumno.Rows(i).Cells(0).Value )
' ' MsgBox("culpe")
' Else
' DataGridCargarAlumno.Rows(i).Cells(0).Value = False
' ' MsgBox(DataGridCargarAlumno.Rows(i).Cells(0).Value )
' ' MsgBox("no cumple")
' End If
'Next
'************************************************* *******
End Sub

Trate de escribir lo que trato de hacer en cada línea de código.

Saludos y Exito

Aca tambien adjunto el módulo para cargar el DataGrid:

Sub CargarDataGrid(ByVal OrigendeDatos As Windows.Forms.BindingSource, ByVal myAdapter As SqlDataAdapter, ByVal myTable As DataTable, ByVal DataGridGrupo As Object, ByVal SQL As String)

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
'************************************************* ************************************************** **
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
  #7 (permalink)  
Antiguo 23/06/2009, 08:55
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: Marcar un CheckBox de un DataGridView en VB.Net

una pregunta yo probe tu codigo y me sale excelentemente en mi maquina solo una pregunta estas usando un evento a parte en el datagridview
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #8 (permalink)  
Antiguo 23/06/2009, 15:57
 
Fecha de Ingreso: febrero-2009
Mensajes: 101
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: Marcar un CheckBox de un DataGridView en VB.Net

Cita:
Iniciado por Dradi7 Ver Mensaje
una pregunta yo probe tu codigo y me sale excelentemente en mi maquina solo una pregunta estas usando un evento a parte en el datagridview
Hola Dradi7 Gracias por probar mi codigo. y bueno si estoy usando otros eventos:

Código:
Private Sub DataGridCargarAlumno_CellContentClick(...) Handles DataGridCargarAlumno.CellContentClick

        ' Ojo este codigo debe ir para que te funcione al hacer click en el checkbox de la grilla
        If e.RowIndex < 0 Or Not e.ColumnIndex = 0 Then Exit Sub
        If Convert.ToBoolean(DataGridCargarAlumno.Rows(e.RowIndex).Cells(0).Value) Then
            DataGridCargarAlumno.Rows(e.RowIndex).Cells(0).Value = False
        Else
            DataGridCargarAlumno.Rows(e.RowIndex).Cells(0).Value = True
        End If
        ' 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
    End Sub
Este fue él que me pasastes tú

Y a parte tengo un boton y este es el codigo del boton en su evento click:

Código:
Private Sub BtnGuarda_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnGuarda.Click
       
        For Each Row As DataGridViewRow In DataGridCargarAlumno.Rows
            If Convert.ToBoolean(Row.Cells(0).Value) = True Then ' Si chekee una fila de la grilla
                Cont += 1 'se acumula la fila
                SQLAlumno = ("Update ALUMNO Set IdGrupo='" & Id & "' where CedAlumno='" & Convert.ToString(Row.Cells(1).Value) & "'")
                'update para modifica el idGrupo en la tabla alumno y asignarle en Id del nuevo grupo
                CmdAlumno.CommandText = SQLAlumno
                CmdAlumno.Connection = myConn
                'para ejecutar el SQLAlumno
                If CmdAlumno.ExecuteNonQuery() <> 0 Then 'evalua si el .ExecuteNonQuery se ejecuto
                    MsgBox("Los alumnos se cargaron satisfactoriamente")
                Else
                    MsgBox("Error en la carga de los Alumnos")
                End If
            End If
        Next
        '*************************************************************************************'
        'MODIFICA EN LA TABLA GRUPO LA CANTIDAD DE ALUMNOS CARGADOS DE ACUERDO AL ID DEL GRUPO
        SQLCantidad = "Update GRUPO Set CantAlumno='" & Cont & "'  where IdGrupo='" & Id & "' "
        'modificar la cantidad de alumnos de la tabla grupo
        CmdCantidad.CommandText = SQLCantidad
        CmdCantidad.Connection = myConn
        CmdCantidad.ExecuteNonQuery()
        'para ejecutar el SQLCantidad
        VentanaOpcionGrupo.LabelCantidad.Text = Cont 'Label para mostrar la cantidad de alumnos cargados
        Me.Close()
    End Sub
De resto... mas nada!!!

Saludos y Exito
  #9 (permalink)  
Antiguo 23/06/2009, 16:34
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: Marcar un CheckBox de un DataGridView en VB.Net

mejor enviame tu codigo a mi correo de como lo estas haciendo y te envio la respuesta porque parece raro de que no te salga mi correo es [email protected]
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
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 13:46.