Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

msflexgrid: eliminar lineas

379 views
Skip to first unread message

gustavo gutierrez morales

unread,
Oct 9, 2007, 2:05:49 AM10/9/07
to
Buenas noches a todos:
necesito eliminar ciertas filas de un grid que cumplan con una condicion.
Para esto, llamo a una función que recorre el grid y en la linea que cumpla
la condición, ejecuta removeitem:
Function CompactarGrid(ByVal ElGrid As Control)
Dim Linea As Integer
For Linea = 1 To ElGrid.Rows
If ElGrid.TextMatrix(Linea, 1) = "" Or IsNull(ElGrid.TextMatrix(Linea, 1))
Then
ElGrid.RemoveItem Linea
End If
Next Linea
End Function

Y funciona, pero al eliminarse el renglón se interrumpe con el mensaje "el
indice está fuera del intervalo". me imagino que la propiedad rows mantiene
el valor que tenía antes de eliminar uno o mas renglones y por eso se sale.
¿Como puedo evitar este error?
!Gracias de antemano!

--
Gustavo Gutierrez Morales
SICORI, SA DE CV
calle rio bravo norte 3
col. rafael avila camacho
San Pedro Cholula, Pue. cp 72765
Tels (222)-2858223,2854964, 2850544
cel. (222)-4361610


gustavo gutierrez morales

unread,
Oct 9, 2007, 2:30:44 AM10/9/07
to
perdón. el for era hasta rows -1

"gustavo gutierrez morales" <gustavo...@hotmail.com> escribió en el
mensaje news:OMDYypjC...@TK2MSFTNGP06.phx.gbl...

Leonardo Azpurua

unread,
Oct 9, 2007, 3:16:34 AM10/9/07
to

"gustavo gutierrez morales" <gustavo...@hotmail.com> escribió en el
mensaje news:OMDYypjC...@TK2MSFTNGP06.phx.gbl...
> Buenas noches a todos:
> necesito eliminar ciertas filas de un grid que cumplan con una condicion.
> Para esto, llamo a una función que recorre el grid y en la linea que
> cumpla la condición, ejecuta removeitem:
> Function CompactarGrid(ByVal ElGrid As Control)
> Dim Linea As Integer
> For Linea = 1 To ElGrid.Rows
> If ElGrid.TextMatrix(Linea, 1) = "" Or IsNull(ElGrid.TextMatrix(Linea,
> 1)) Then
> ElGrid.RemoveItem Linea
> End If
> Next Linea
> End Function
>
> Y funciona, pero al eliminarse el renglón se interrumpe con el mensaje "el
> indice está fuera del intervalo". me imagino que la propiedad rows
> mantiene el valor que tenía antes de eliminar uno o mas renglones y por
> eso se sale. ¿Como puedo evitar este error?
> !Gracias de antemano!

Hola, Gustavo:

Para la eliminacion en elementos agregados, siempre es mejor moverse desde
arriba:

For i = .Rows - 1 To .FixedRows STEP - 1
If .TextMatrix(i, 0) = "" Or IsNull(.TextMatrix(i, 0)) Then
.RemoveItem(i)
End If
Next

Lo mismo en colecciones, treeViews, ListBoxes, ComboBoxes, etc.

Salud!


gustavo gutierrez morales

unread,
Oct 9, 2007, 3:17:50 AM10/9/07
to
finalmente lo resolví cambiando el bucle for..next por un do..while. Lo que
pasa es que el for..next efectúa una comprobación mas cuando ya se salió de
rango y el do..while no. Entonecs quedó asi:

Function CompactarGrid(ByVal ElGrid As Control)
Dim Lin As Integer
Lin = 1
Do While Lin < ElGrid.Rows
If ElGrid.TextMatrix(Lin, 1) = "" Or IsNull(ElGrid.TextMatrix(Lin, 1)) Or
ElGrid.TextMatrix(Lin, 4) = "" Then
ElGrid.RemoveItem Lin
End If
Lin = Lin + 1
Loop
End Function


!Gracias!

"gustavo gutierrez morales" <gustavo...@hotmail.com> escribió en el

mensaje news:emnGt3jC...@TK2MSFTNGP06.phx.gbl...

gustavo gutierrez morales

unread,
Oct 9, 2007, 4:26:42 AM10/9/07
to
!Genial!. y de esta forma nunca me salgo de la colección, no es asi?. Pues
ahora mismo cambio el do..while por este for.

!Gracias!

"Leonardo Azpurua" <l e o n a r d o [arroba] m v p s [punto] o r g> escribió
en el mensaje news:uxIXTRkC...@TK2MSFTNGP06.phx.gbl...

jcastro

unread,
Oct 9, 2007, 2:27:12 PM10/9/07
to
On 9 oct, 04:26, "gustavo gutierrez morales"

<gustavogmora...@hotmail.com> wrote:
> !Genial!. y de esta forma nunca me salgo de la colección, no es asi?. Pues
> ahora mismo cambio el do..while por este for.
>

De hecho tu metodo inicial estaba malo debido a que si queremos borrar
la fila 2 y 3 (consecutivas).

Borra la fila 2... la fila 3 pasa a ser la 2, la 4 --> 3, etc.
luego continuamos el ciclo y seguimos con la fila 3 que antes era la
fila 4, o sea no se va a borrar nunca 2 y 3.

0 new messages