EXCLUIR LINHAS SEMI IGUAIS NO FLEXGRID

POAMM 28/10/2009 07:51:16
#326404
estou tentando apartir desse codigo, excluir as linhas do meu flex1 que são iguais, da coluna 0 até a 5.

On Error Resume Next

Dim ndin40 As Integer
Dim ndin03 As Integer
ndin03 = flex1.Rows
ndin40 = 5


For ndin04 = 0 To ndin03

For ndin05 = 0 To ndin40

If flex1.TextMatrix(ndin04, ndin05) <> flex1.TextMatrix(ndin04 - 2, ndin05) Then
Else
flex1.RemoveItem (ndin04)

End If

Next

Next


a ideia principal é: se da coluna 0 até a 5 as informações forem as mesma, o codigo a cima deveria excluir essa linha. porem deixando apenas 1 linhas.

ex: c0 c1 c2 c3 c4 c5 c6 c7 c8
l1 a b c d e f g y z
l2 a b c d e f x a u
l3 c d a a b t o p l
l4 b u f l m b x q ç
l5 b u f l m b x v q

se isso a cima fosse meu flexgrid.
teria que excluir a l1 que é igual a l2. l2 fica
teria que excluir a l4 que é igual a l5. l5 fica

é isso que quero fazer, alguem pode me ajudar nisso? :\

agradeço desde jah!
EDERMIR 28/10/2009 08:59:27
#326412
Imaginando que seu grid já está montado:

Witem_anterior = [Ô]([Ô] & msfexgrid1.textmatrix(0,1) & [Ô])([Ô] & msfexgrid1.textmatrix(0,2) & [Ô])([Ô] & msfexgrid1.textmatrix(0,3) & [Ô])([Ô] & msfexgrid1.textmatrix(0,4) & [Ô])([Ô] & msfexgrid1.textmatrix(0,5) & [Ô])[Ô]
msflexgrid1.cols = msflexgrid1.cols + 1
for Wx = 1 to msflexgrid1.rows-1
Witem_atual = [Ô]([Ô] & msfexgrid1.textmatrix(Wx,1) & [Ô])([Ô] & msfexgrid1.textmatrix(Wx,2) & [Ô])([Ô] & msfexgrid1.textmatrix(Wx,3) & [Ô])([Ô] & msfexgrid1.textmatrix(Wx,4) & [Ô])([Ô] & msfexgrid1.textmatrix(Wx,5) & [Ô])[Ô]
If Witem_atual = Witem_anterior then
msflexgrid1.textmatrix(Wx-1,msflexgrid.cols-1) = [Ô]SIM[Ô]
else
msflexgrid1.textmatrix(Wx-1,msflexgrid.cols-1) = [Ô]NÃO[Ô]
endif
msflexgrid1.textmatrix(Wx,msflexgrid.cols-1) = [Ô]NÃO[Ô]
Witem_anterior = [Ô]([Ô] & msfexgrid1.textmatrix(Wx,1) & [Ô])([Ô] & msfexgrid1.textmatrix(Wx,2) & [Ô])([Ô] & msfexgrid1.textmatrix(Wx,3) & [Ô])([Ô] & msfexgrid1.textmatrix(Wx,4) & [Ô])([Ô] & msfexgrid1.textmatrix(Wx,5) & [Ô])[Ô]
Next Wx

For Wy = msflexgrid1.rows-1 to 1 step -1
if msflexgrid1.textmatrix(Wy,msflexgrid1.cols-1) = [Ô]SIM[Ô] then
msflexgrid1.removeitem (Wy)
endif
next Wy

msflexgrid1.cols = msflexgrid1.cols -1
MARCELO.TREZE 28/10/2009 10:07:39
#326423
A situação é meio complexa.

você deve comparar o conteudo da linha 01 com todas demais, o conteudo a linha dois com todas a s demais e assim por diante, se vc possuir muitas linhas estes processo se tornará lento

mas veja na pratica a ideia

Teremos de criar dois laços FOR um dentro do Outro

Dim Linha As Integer [ô]linha de base
Dim LinhaComp As Integer [ô]linha de comparação

With Flex1
For Linha = 1 To .Rows - 1
For LinhaComp = 1 To .Rows -1
If LinhComp <> Linha Then
If _
(.TextMatrix(Linha, 0) = .TextMatrix(LinhaComp, 0)) AND _
(.TextMatrix(Linha, 1) = .TextMatrix(LinhaComp, 1)) AND _
(.TextMatrix(Linha, 2) = .TextMatrix(LinhaComp, 2)) AND _
(.TextMatrix(Linha, 3) = .TextMatrix(LinhaComp, 3)) AND _
(.TextMatrix(Linha, 4) = .TextMatrix(LinhaComp, 4)) Then
.RemoveItem (LinhaComp)
End If
End If
Next LinhaComp
Next Linha
End With


veja o código acima se funciona

Tópico encerrado , respostas não são mais permitidas