martes, 23 de marzo de 2010

No se puede obtener acceso a la información eliminada de una fila



Estimados lectores, ha sido una experiencia agradable el hacer este blog y tener algunos lectores que comparten el gusto por la programación; actualmente estoy empezando otro proyecto, muy personal,  con tecnología web  que espero compartir con toda la comunidad de programadores y necesito recursos porque es algo muy personal y mi situación financiera no es muy buena.

 Si alguien desearía apoyarme  tengo una tarjeta Oxxo Saldazo con el número:  4766-8408-7508-1593, cualquier apoyo lo pueden hacer en cualquier tienda Oxxo o en Banamex, les agradezco y que sus proyectos lleguen a buen fin.

Es frecuente eliminar un registro, ya sea de un datagridview, dataset o datatable y después querer procesar los registros para realizar cierta operación, como puede ser:
Colocar algún estatus de un campo.
Pongamos el ejemplo de que hemos eliminado alguna calificación de un alumno y damos de alta otra calificación dentro de un datagridview. Después queremos colocar un estatus de que el alumno ha sido actualizado. Si recorremos toda la tabla subyacente al datagridview haríamos lo siguiente
For Each dr As DataRow In dtabalumno.Rows
dr("status") =”PROCESADO”
Next
‘Como hemos borrado un registro al hacer esta rutina nos presenta el error siguiente
“No se puede obtener acceso a la información eliminada de una fila”, esto es porque cuando borramos un registro únicamente se marca como borrado, no se ha eliminado, por lo tanto lo procesa. La eliminación fisica se hará hasta que confirmes y actualices los datos. Pero como el registro tiene un valor para saber si ha sido marcado como borrado o no, le podemos poner la siguiente condición.
If dr.RowState = DataRowState.Deleted Then
De esa manera el proceso quedaria de la siguiente manera:
For Each dr As DataRow In dtabalumno.Rows
If dr.RowState = DataRowState.Deleted Then
‘no procesa el registro eliminado
else
dr("status") =”PROCESADO”
endif
Next

16 comentarios:

  1. Muchas gracias, tenía ese problema al borrar un registro del DataTable.

    ResponderEliminar
  2. Que bueno que te haya servido!. La idea es compartir conocimientos. Piedra que rueda no crea moho. Suerte con tus proyectos.
    saludos

    ResponderEliminar
  3. Muchas gracias muy buen dato.

    ResponderEliminar
  4. Gracias a ti por dejar un comentario. Es satisfactorio que algun conocimiento sea util para otra persona. Saludos

    ResponderEliminar
  5. gracias, necesitaba urgente esa lógica!

    ResponderEliminar
  6. Gracias por comentar Mario,buena suerte en tus proyectos
    atentamente
    Amado Jiménez

    ResponderEliminar
  7. Buenas ajimenez, esto se aplicaria tambien para un datagridview con el que mueves registros a otro datagriview? la cosa seria que deverian volver a pasarse en otro momento

    ResponderEliminar
    Respuestas
    1. Umm, Mikel Garcia, no me quedo muy clara tu pregunta pero si borras un registro en un datagridview siempre se comportara de la misma manera.
      saludos

      Eliminar
    2. Te explico, tengo dos DataGridView.
      En el primero se cargan de base de datos varios registros.
      Al segundo se pasan registros del primero, pero en algun momento habra que regresar esas filas al primero.

      PROBLEMA: en el primero tengo un tooltip que muestra informacion completa del registro (y funciona), pero cuando paso un registro al segundo y pasar el raton por el lugar que le correspondia a ese registro en el primero, me sala el error.

      Eliminar
    3. Mikel, si borraste ese registro para pasarlo al segundo grid se presentara el error al regresar al primero, puesto que ya esta marcado internamente como borrado, lo que puedes hacer es que en el evento que te dispara el tooltip evaluar si esta borrado o no y actuar en consecuencia.
      La mayoria de las veces es imposible saber que esta pasando a menos que uno tenga a la vista el codigo; si te sigue dando problemas enviame ese fragmento de codigo a mi correo:ajimenez013@hotmail.com; no es necesario que me envies tablas ni el programa en si, solo el fragmento de codigo que te esta dando problemas.
      A veces resulta que el problema esta mal planteado, recuerda que a veces en lugar de batallar con el codigo es mejor replantear la solucion atu requerimiento , pudiera ser que no sea la manera mas optima de resolverlo y habra que plantear otra alternativa.
      saludos y suerte

      Eliminar
    4. Muchas gracias por tu atención y tu tiempo ajimenez, pero ya he resuelto mi duda.
      si quereis verla:
      Solucion

      Eliminar
    5. Perfecto Mikel, que bueno que ya quedo resuelta.saludos

      Eliminar
  8. Mucha gracias por la información, me ayudó con mi proyecto. Saludos desde Perú

    ResponderEliminar
    Respuestas
    1. Que bien Gonzalo, Saludos a esa tierra llena de tradiciones de Perú.

      Eliminar