Visual Basic.NET - datagridview con checkbox

 
Vista:
sin imagen de perfil
Val: 38
Ha aumentado su posición en 2 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

datagridview con checkbox

Publicado por javier jimenez (23 intervenciones) el 12/04/2021 21:56:05
Buenas tardes

Necesito un poco de ayuda, necesito actualizar registros seleccionados en un checkbox dentro de un datagridview, actualmente tengo el siguiente código, no marca ningún error pero tampoco me genera la actualización

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
For Each dgvfilas As DataGridViewRow In DataGridView1.Rows
 
    If Convert.ToBoolean(dgvfilas.Cells("Avance").Value) = True Then
 
        'Consulta que fila esta seleccionada en el checkbox
        Dim Nfila As Integer = dgvfilas.Cells("Avance").RowIndex
 
        'Identifica que alumno esta seleccionado apartir de la fila anterior
        Dim IdAlumno As String = DataGridView1.Rows(Nfila).DataBoundItem("Id_Alumno").ToString
 
        'Actualiza con respecto al Id del Alumno
        Dim cmd As New SqlCommand("Update Rel_Alum_Grup set Id_Grupo=@Id_Grupo, Id_Periodo=@Id_Periodo, Id_PlanEstudios=@Id_PlanEstudios, Ult_Mod=@Ult_Mod, Ult_Usu_Mod=@Ult_Usu_Mod where Id_Grupo = '" & txtIdGrupo.Text & "' and Id_Alumno = '" & IdAlumno & "'", conex)
 
        Dim cmm As New SqlDataAdapter
 
        cmm.UpdateCommand = cmd
        cmm.UpdateCommand.Parameters.Add(New SqlParameter("@Id_Grupo", SqlDbType.Int)).Value = txtIdGrupo2.Text
        cmm.UpdateCommand.Parameters.Add(New SqlParameter("@Id_Periodo", SqlDbType.Int)).Value = txtIdPeriodo2.Text
        cmm.UpdateCommand.Parameters.Add(New SqlParameter("@Id_PlanEstudios", SqlDbType.Int)).Value = TxtIdPlan2.Text
        cmm.UpdateCommand.Parameters.Add(New SqlParameter("@Ult_Mod", SqlDbType.Date)).Value = Inicio.Lblfecha.Text
        cmm.UpdateCommand.Parameters.Add(New SqlParameter("@Ult_Usu_Mod", SqlDbType.NVarChar)).Value = Inicio.Lblusuario.Text
 
        cmd.ExecuteNonQuery()
        MessageBox.Show("Se han guardado correctamente los cambios")
        consultaAlumnos()
    End If

Al tiempo de ejecución todo parece ir bien e incluso manda el mensaje final pero no realiza la actualización, espero me puedan ayudar

De antemano gracias!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

datagridview con checkbox

Publicado por Phil Rob (1554 intervenciones) el 13/04/2021 17:35:05
Hola,

Hay algunas manieras de poner los parámetros.
Pienso que el código siguiente es mejor (no lo he probado con tu DB ...) :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
' ... ... ... ...
 
'Actualiza con respecto al Id del Alumno
MaCommande = New SQLCommand()
MaCommande.Connection = cmm  ' supongo cmm es una conneccion activa
Dim cmdText As String ="Update Rel_Alum_Grup set Id_Grupo=@Id_Grupo, Id_Periodo=@Id_Periodo, Id_PlanEstudios=@Id_PlanEstudios, Ult_Mod=@Ult_Mod, Ult_Usu_Mod=@Ult_Usu_Mod where Id_Grupo = '" & txtIdGrupo.Text & "' and Id_Alumno = " & IdAlumno , conex)   ' no escibir el ' por que IdAlimno es numerico
 
'     Dim cmm As New SqlDataAdapter
 
'    cmm.UpdateCommand = cmd
MaCommande.Parameters.AddWithValue("@Id_Grupo", txtIdGrupo2.Text)
MaCommande.Parameters.AddWithValue("@Id_Periodo", txtIdPeriodo2.Text)
MaCommande.Parameters.AddWithValue("@Id_PlanEstudios", TxtIdPlan2.Text)
MaCommande.Parameters.AddWithValue("@Ult_Mod", Inicio.Lblfecha.Text)
MaCommande.Parameters.AddWithValue("@Ult_Usu_Mod", Inicio.Lblusuario.Text)
 
If MaCommande.ExecuteNonQuery() < 1 Then
    ' Error
    ' ... ... ... el mensa  je que tu gusta
Else
    MessageBox.Show("Se han guardado correctamente los cambios")
End If
 
 
' ... ... ... ...

...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 38
Ha aumentado su posición en 2 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

datagridview con checkbox

Publicado por javier jimenez (23 intervenciones) el 14/04/2021 19:08:07
Te agradezco el apoyo, utilice parte del código y funciona ahora correctamente, solo una consulta sobre el código de validación y es q en la parte de notificación de error me lo muestra cuando si a hecho la modificación, mi pregunta seria si el valor 1 es correcto

1
2
3
4
5
6
If MaCommande.ExecuteNonQuery() < 1 Then
    ' Error
    ' ... ... ... el mensa  je que tu gusta
Else
    MessageBox.Show("Se han guardado correctamente los cambios")
End If

Por otro lado, como puedo hacer la validación sin que se repita el mensaje por cada uno de los registros modificados, ya q ahorita me sale un mensaje por cada uno de ellos

De antemano muchas gracias!!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

datagridview con checkbox

Publicado por Phil Rob (1554 intervenciones) el 14/04/2021 20:59:19
Hola,

Para no recibir el mensaje a cada vez, bastante quitar la linea MessageBox.Show ...
o enviar un mensaje solamente cuando hay error :


1
2
3
4
5
6
If MaCommande.ExecuteNonQuery() < 1 Then
    MessageBox.Show("No están guardado correctamente los cambios. Existe error")
 
Else
     ' ... ... ... nada a hacer
End If

El comando MaCommande.ExecuteNonQuery da el cantidad de líneas modificadas en el DB. Para un UPDATE con un WHERE ID =, solamente UNA linea puede ser modificada.
Si MaCommande.ExecuteNonQuery da 0, este es que no es encontrado el ID.
Si MaCommande.ExecuteNonQuery da -1, este es que existe otro error, quizá no es permitido de escribir.
Si MaCommande.ExecuteNonQuery da >1, (con UPDATE ... WHERE ID=... ) este que existen errores con los ID en la tabla.

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar