Borrar por rangos o filtros en un DataTable

17/09/2004 - 17:31 por Borrar por filtros | Informe spam
Hola grupo.

Tengo una DataTable llamada clientes mi intención es
borrar todos los registros que contengan el nombre 'Juan',
pero cuando ejecuto el método Delete(). Sólo borra el
primer registro con el nombre de 'Juan' y para los demás
registros coincidientes manda un error de exepción.

A caso no se puede borrar por rangos o que estoy haciendo
mal.?

Esto es parte de mi código para borrar:

Tengo una tabla con los siguientes registros:

1 Juan
2 Pedro
3 Juan
4 Luis
5 Jose
6 Juan

Hago una vista para obtener el filtro de 'Juan'

dv = New DataView
dv.Table = ds.Tables("clientes")
dv.RowFilter = "nombre='Juan'"
Me.DataGrid1.DataSource = dv

Dim i As Integer
For i = 0 To dv.Count
ds.Tables("clientes").Rows.Item(i).Delete()
Next

Cuando hace el primer For borra el registro, pero al
siguiente registro manda el error y deja de borrar. ¿Qué
está pasanfo porqué no termina el ciclo?

Esto sólo es para una tabla local, por lo que no requiero
hacer conexión a base de datos para actualizar.

Lo único que necesito es borrar todos los registros con el
nombre 'Juan' en una DataTable.

Gracias por su ayuda.

Preguntas similare

Leer las respuestas

#1 Eduardo A. Morcillo [MS MVP VB]
17/09/2004 - 20:11 | Informe spam
Tienes varios errores en ese codigo. El primer problema aqui es que estas
borrando los primero "dv.count" registros de la tabla en lugar de los
registros que estan en la vista. En segundo lugar como el primer elemento
tiene indice 0 el ultimo es dv.count-1 y no dv.count. Lo que debes hacer es
usar el metodo Delete de la vista. Otra cosa a tener en cuenta es que
eliminar elementos de una coleccion le cambia el indice a los elementos
restantes que estan detras de el. Por lo tanto puedes o hacer la enumeracion
desde el utlimo hacia el primero o eliminar siempre el primer elemento en el
bucle.

' Desde el ultimo al primero
For i = dv.Count - 1 To 0 Step -1
dv.Delete(i)
Next

' Borrar siempre el primero
For i = 0 To dv.Count - 1
dv.Delete(0)
Next

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
Respuesta Responder a este mensaje
#2 Gracias Eduardo
17/09/2004 - 20:32 | Informe spam
Gracias Eduardo por tu explicación sinceramente me fue muy
útil.


Hola grupo.

Tengo una DataTable llamada clientes mi intención es
borrar todos los registros que contengan el


nombre 'Juan',
pero cuando ejecuto el método Delete(). Sólo borra el
primer registro con el nombre de 'Juan' y para los demás
registros coincidientes manda un error de exepción.

A caso no se puede borrar por rangos o que estoy haciendo
mal.?

Esto es parte de mi código para borrar:

Tengo una tabla con los siguientes registros:

1 Juan
2 Pedro
3 Juan
4 Luis
5 Jose
6 Juan

Hago una vista para obtener el filtro de 'Juan'

dv = New DataView
dv.Table = ds.Tables("clientes")
dv.RowFilter = "nombre='Juan'"
Me.DataGrid1.DataSource = dv

Dim i As Integer
For i = 0 To dv.Count
ds.Tables("clientes").Rows.Item(i).Delete()
Next

Cuando hace el primer For borra el registro, pero al
siguiente registro manda el error y deja de borrar. ¿Qué
está pasanfo porqué no termina el ciclo?

Esto sólo es para una tabla local, por lo que no requiero
hacer conexión a base de datos para actualizar.

Lo único que necesito es borrar todos los registros con


el
nombre 'Juan' en una DataTable.

Gracias por su ayuda.

.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida