Visual Basic.NET - Modificar un ForEach para que muestre un mensaje de confirmación 1 sola vez

 
Vista:
sin imagen de perfil
Val: 80
Ha disminuido 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Modificar un ForEach para que muestre un mensaje de confirmación 1 sola vez

Publicado por María Inés (49 intervenciones) el 03/06/2018 22:23:24
Buenos días a todos!!! Les comento brevemente qué quiero hacer. El siguiente código es de un botón eliminar que permite borrar múltiples registros de un datagridview. Anda perfectamente (por eso no hago referencia a las funciones que están en otra capa).
La cosa es que quería que si son varios los registros que borra, entonces, que me muestre el mensaje de confirmación 1 sola vez de que los borró, no 1 por cada registro.
El tema es que como está dentro del "For Each" no me doy cuenta cómo puedo hacer para que "si borra" o sea la parte que dice "If func.Eliminar" entonces que me diga si lo borró o no, porque lógicamente lo tiene que ir haciendo uno por uno.
Cuestión, le he dado vueltas al asunto, intenté con unos dt.Rows.Count >=1 pero siguen dentro del For Each así que claramente, no dan resultado.
Si alguno me puede aportar alguna idea, les agradecería. Abajo dejo el código de mi Botón Eliminar (Es un datagridview con una columna oculta "Eliminar" que al hacer click en un checkbox, aparece la columna y permite seleccionar múltiples registros, una vez que lo borra o no, envía el mensaje, uno por cada registro eliminado. Lo que quiero es que si hay varios registros sólo muestre 1 mensaje, es una cuestión más de estética que de funcionalidad pero queda feo así)
Desde ya muchas gracias a todos!

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
27
28
29
30
31
32
Private Sub Btn_Eliminar_Click(sender As Object, e As EventArgs) Handles Btn_Eliminar.Click
        Dim result As DialogResult
        result = MessageBox.Show("¿Realmente desea eliminar el/los paciente/s seleccionado/s?", "Eliminando registros", MessageBoxButtons.OKCancel, MessageBoxIcon.Question)
 
        If result = DialogResult.OK Then
            Try
                For Each row As DataGridViewRow In Dgv_Buscarpaciente.Rows
                    If row.Cells("Eliminar").Value <> Nothing Then
                        Dim onekey As Integer = Convert.ToInt16(row.Cells("NHC").Value)
                        Dim Dts As New VCargapacientes
                        Dim func As New FCargapacientes
                        Dts.GNHC = onekey
 
                        If func.Eliminar(Dts) Then
                                MessageBox.Show("Eliminación completada satisfactoriamente", "Eliminando registros", MessageBoxButtons.OK, MessageBoxIcon.Information)
                                Chb_Eliminar.CheckState = CheckState.Unchecked
                            Else
                                MessageBox.Show("La acción no fue completada", "Eliminando registros", MessageBoxButtons.OK, MessageBoxIcon.Information)
                            End If
 
                        End If
                Next
                Mostrar()
 
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
        Else
            MessageBox.Show("Cancelando eliminación de registro/s", "Eliminando registros", MessageBoxButtons.OK, MessageBoxIcon.Information)
        End If
 
    End Sub
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 Wilfredo
Val: 1.322
Plata
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Modificar un ForEach para que muestre un mensaje de confirmación 1 sola vez

Publicado por Wilfredo (621 intervenciones) el 04/06/2018 21:07:27
Si tu funcionalidad es borrar una lista, entonces lo que podrías hacer es: Al recorrer la grilla, meter los ids o el dato con el cual identifiques esos datos, en una lista, y enviárselo a tu capa donde haces la eliminación en sí, y que te devuelva un boolean=true cuando termine de eliminar la lista, con lo cual al hacer esa pregunta si se eliminó o no, si lo hizo te devolverá verdadero y con eso ya tienes solucionado tu problema.

Saludos cordiales,
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

Modificar un ForEach para que muestre un mensaje de confirmación 1 sola vez

Publicado por Cristian Saavedra (11 intervenciones) el 05/06/2018 18:43:07
Con respecto a tu pregunta de que solo te pregunte una vez si deseas eliminar el registro lo que yo haria es crear una variable auxiliar, la inicializas con valor 0 y evaluo primero el valor de esta variable. Si la variable es 0 muestro el mensaje y despues cambio el valor de la variable a 1 para que no ingrese mas en esa condicion y seria algo asi :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Dim aux As Integer = 0
 
For Each row As DataGridViewRow In Dgv_Buscarpaciente.Rows
    If row.Cells("Eliminar").Value <> Nothing Then
        Dim onekey As Integer = Convert.ToInt16(row.Cells("NHC").Value)
        Dim Dts As New VCargapacientes
        Dim func As New FCargapacientes
        Dts.GNHC = onekey
 
        If func.Eliminar(Dts) Then
 
            Chb_Eliminar.CheckState = CheckState.Unchecked
            aux = aux + 1
        Else
            MessageBox.Show("La acción no fue completada", "Eliminando registros", MessageBoxButtons.OK, MessageBoxIcon.Information)
        End If
 
    End If
Next
If aux > 0 Then
   MessageBox.Show("Eliminación completada satisfactoriamente", "Eliminando registros", MessageBoxButtons.OK, MessageBoxIcon.Information)
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
1
Comentar
sin imagen de perfil
Val: 80
Ha disminuido 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Modificar un ForEach para que muestre un mensaje de confirmación 1 sola vez

Publicado por María Inés (49 intervenciones) el 05/06/2018 20:22:20
Muchas gracias Wilfredo y Cristian por contestar! Finalmente apliqué tu solución Cristian porque me resultó la más fácil, te agradezco muchísimo tu tiempo para responderme y explicarme cómo hacerlo. También a Wilfredo por su idea.
No se me ocurría cómo hacerlo, me han salvado! 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