QUANT REGISTROS X CELLBACKCOLOR

WEBIER 17/11/2009 13:09:27
#327936
Faço a formatação de meu flexgrid assim:

With Grid

.Clear
.Cols = 11
.Rows = 2

.ColWidth(0) = 0
.ColWidth(1) = 0
.ColWidth(2) = 3850
.ColWidth(3) = 800
.ColWidth(4) = 800
.ColWidth(5) = 800
.ColWidth(6) = 800
.ColWidth(7) = 800
.ColWidth(8) = 800
.ColWidth(9) = 800
.ColWidth(10) = 800

.TextMatrix(0, 1) = [Ô]COD[Ô]
.TextMatrix(0, 2) = [Ô]PRODUTO[Ô]
.TextMatrix(0, 3) = [Ô]QUANT[Ô]
.TextMatrix(0, 4) = [Ô]CUSTO[Ô]
.TextMatrix(0, 5) = [Ô]FRETE[Ô]
.TextMatrix(0, 6) = [Ô]IMP.[Ô]
.TextMatrix(0, 7) = [Ô]VALOR[Ô]
.TextMatrix(0, 8) = [Ô]LUCRO[Ô]
.TextMatrix(0, 9) = [Ô]IMP.[Ô]
.TextMatrix(0, 10) = [Ô]VENDA[Ô]


[ô]colocar os cabeçalho em negrito
For X = 0 To .Cols - 1
.Col = X
.Row = 0
.CellFontBold = True
Next X

[ô]ALINHAMENTO
.ColAlignment(2) = 1

[ô]centralizar o titulo
For f = 0 To .Cols - 1
.Row = 0
.Col = f
.CellAlignment = flexAlignCenterCenter
Next f

Do Until Rs.EOF

.Redraw = False

[ô]mudar a cor da coluna
Dim i
For i = 1 To .Rows - 1
.Row = i
.Col = 4: .CellBackColor = &HC0FFFF
.Col = 10: .CellBackColor = &HC0C0FF
Next

.Redraw = True

If Not IsNull(Rs!var_CodEnt) Then .TextMatrix(.Rows - 1, 1) = Rs!var_CodEnt
If Not IsNull(Rs!var_desc) Then .TextMatrix(.Rows - 1, 2) = Rs!var_desc
If Not IsNull(Rs!var_Quant) Then .TextMatrix(.Rows - 1, 3) = Rs!var_Quant
If Not IsNull(Rs!var_custo) Then .TextMatrix(.Rows - 1, 4) = Format(Rs!var_custo, [Ô]##,##0.00[Ô])
If Not IsNull(Rs!var_frete) Then .TextMatrix(.Rows - 1, 5) = Format(Rs!var_frete, [Ô]##,##0.00[Ô])
If Not IsNull(Rs!var_impcompra) Then .TextMatrix(.Rows - 1, 6) = Format(Rs!var_impcompra, [Ô]##,##0.00[Ô])
If Not IsNull(Rs!var_vlrcompra) Then .TextMatrix(.Rows - 1, 7) = Format(Rs!var_vlrcompra, [Ô]##,##0.00[Ô])
If Not IsNull(Rs!Var_Lucro) Then .TextMatrix(.Rows - 1, 8) = Format(Rs!Var_Lucro, [Ô]##,##0.00[Ô])
If Not IsNull(Rs!var_impvenda) Then .TextMatrix(.Rows - 1, 9) = Format(Rs!var_impvenda, [Ô]##,##0.00[Ô])
If Not IsNull(Rs!var_vlrvenda) Then .TextMatrix(.Rows - 1, 10) = Format(Rs!var_vlrvenda, [Ô]##,##0.00[Ô])
Rs.MoveNext

.Rows = .Rows + 1

Loop

.Rows = .Rows - 1

End With


o problema tá na hora de [Ô]colorir[Ô] as colunas 4 e 10

 .Redraw = False

[ô]mudar a cor da coluna
Dim i
For i = 1 To .Rows - 1
.Row = i
.Col = 4: .CellBackColor = &HC0FFFF
.Col = 10: .CellBackColor = &HC0C0FF
Next

.Redraw = True



quando são poucos registros funciona beleza, estou com um problema quando é grande a quantidade de registros. ELE TRAVA O PC QUANDO VAI PREENCHER O GRID

Tenho uns clientes com 3000 produtos que estão passando pro esses problemas....

se eu tirar essa parte de colorir as celulas ele mostra normalmente os 3000 produtos, mas se for para colorir ele trava.

A maquina é boa e tem muita memoria... mas mesmo assim trava.

Que devo fazer para colorir uma ou mais colunas e preencher um grid com muitos registros sem pesa?

RICATOM 17/11/2009 13:13:56
#327938
Experimenta colocar um Doevents dentro do loop.
WEBIER 17/11/2009 13:16:11
#327940
Desculpa a minha falta de conhecimento...

mas como seria usando o Doevents
RICATOM 17/11/2009 16:58:01
#327964
O Doevents libera memoria, evitando o travamento.

Coloque-o antes do next.
HUGOSSOUZA 17/11/2009 17:31:18
#327974
Resposta escolhida
Webier,
faz assim:

With Grid
.visible = false

[txt-color=#006400]...
... seu código
...[/txt-color]

.visible = true
end With
WEBIER 17/11/2009 17:55:30
#327984
usando a opção do RICARDO TOMIM:

O Flexgrid desaparece e nao mostra nada

usando a opção do HUGOSSOUZA:

Continua travando do mesmo jeito

Alguem tem mais alguma coisa?
HUGOSSOUZA 17/11/2009 18:04:50
#327986
Tem um erro de lógica no seu código.
Cada vez que você preenche o grid, você altera a cor das colunas.
Você pode colocar sua rotina de alterar a cor da grade antes de fazer o loop ou alterar o seu loop.
WEBIER 17/11/2009 19:19:02
#327993
tem como dar um exemplo dessa modificação do loop ?
DANIKULL 17/11/2009 20:10:31
#327997
WEBIER, boa noite.

Experimenta mudar o MSFlexGrid para o MSHFlexGrid. Ele é mais robusto e evita problemas. Agora me dia o seguinte, usando o MSHFlexGrid testei seu código sem os dados do Banco e não travou, o que aconteceu foi uma demora muito grande para a montagem do grid, agora sem chances de usar o MSFlexGrid, ta travando mesmo.
Se você mudar para o MSHFlexGrid e continuiar travando poste novamente ok???
HUGOSSOUZA 18/11/2009 15:27:28
#328087
Faça um teste com esse código:

Dim i

With Grid
.Visible = False

.Clear
.Cols = 11
.Rows = 2

.ColWidth(0) = 0
.ColWidth(1) = 0
.ColWidth(2) = 3850
.ColWidth(3) = 800
.ColWidth(4) = 800
.ColWidth(5) = 800
.ColWidth(6) = 800
.ColWidth(7) = 800
.ColWidth(8) = 800
.ColWidth(9) = 800
.ColWidth(10) = 800

.TextMatrix(0, 1) = [Ô]COD[Ô]
.TextMatrix(0, 2) = [Ô]PRODUTO[Ô]
.TextMatrix(0, 3) = [Ô]QUANT[Ô]
.TextMatrix(0, 4) = [Ô]CUSTO[Ô]
.TextMatrix(0, 5) = [Ô]FRETE[Ô]
.TextMatrix(0, 6) = [Ô]IMP.[Ô]
.TextMatrix(0, 7) = [Ô]VALOR[Ô]
.TextMatrix(0, 8) = [Ô]LUCRO[Ô]
.TextMatrix(0, 9) = [Ô]IMP.[Ô]
.TextMatrix(0, 10) = [Ô]VENDA[Ô]


[ô]colocar os cabeçalho em negrito
For X = 0 To .Cols - 1
.Col = X
.Row = 0
.CellFontBold = True
Next X

[ô]ALINHAMENTO
.ColAlignment(2) = 1

[ô]centralizar o titulo
For f = 0 To .Cols - 1
.Row = 0
.Col = f
.CellAlignment = flexAlignCenterCenter
Next f


i = 1
Do Until Rs.EOF

.Redraw = False

[ô]mudar a cor da coluna

[ô]For i = 1 To .Rows - 1
.Row = i
.Col = 4: .CellBackColor = &HC0FFFF
.Col = 10: .CellBackColor = &HC0C0FF
[ô]Next

.Redraw = True

If Not IsNull(Rs!var_CodEnt) Then .TextMatrix(.Rows - 1, 1) = Rs!var_CodEnt
If Not IsNull(Rs!var_desc) Then .TextMatrix(.Rows - 1, 2) = Rs!var_desc
If Not IsNull(Rs!var_Quant) Then .TextMatrix(.Rows - 1, 3) = Rs!var_Quant
If Not IsNull(Rs!var_custo) Then .TextMatrix(.Rows - 1, 4) = Format(Rs!var_custo, [Ô]##,##0.00[Ô])
If Not IsNull(Rs!var_frete) Then .TextMatrix(.Rows - 1, 5) = Format(Rs!var_frete, [Ô]##,##0.00[Ô])
If Not IsNull(Rs!var_impcompra) Then .TextMatrix(.Rows - 1, 6) = Format(Rs!var_impcompra, [Ô]##,##0.00[Ô])
If Not IsNull(Rs!var_vlrcompra) Then .TextMatrix(.Rows - 1, 7) = Format(Rs!var_vlrcompra, [Ô]##,##0.00[Ô])
If Not IsNull(Rs!Var_Lucro) Then .TextMatrix(.Rows - 1, 8) = Format(Rs!Var_Lucro, [Ô]##,##0.00[Ô])
If Not IsNull(Rs!var_impvenda) Then .TextMatrix(.Rows - 1, 9) = Format(Rs!var_impvenda, [Ô]##,##0.00[Ô])
If Not IsNull(Rs!var_vlrvenda) Then .TextMatrix(.Rows - 1, 10) = Format(Rs!var_vlrvenda, [Ô]##,##0.00[Ô])
Rs.MoveNext

.Rows = .Rows + 1

i = i + 1

Loop

.Rows = .Rows - 1
.Visible = True

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