QUANT REGISTROS X CELLBACKCOLOR
Faço a formatação de meu flexgrid assim:
o problema tá na hora de [Ô]colorir[Ô] as colunas 4 e 10
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?
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?
Experimenta colocar um Doevents dentro do loop.
Desculpa a minha falta de conhecimento...
mas como seria usando o Doevents
mas como seria usando o Doevents
O Doevents libera memoria, evitando o travamento.
Coloque-o antes do next.
Coloque-o antes do next.
Webier,
faz assim:
faz assim:
With Grid
.visible = false
[txt-color=#006400]...
... seu código
...[/txt-color]
.visible = true
end With
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?
O Flexgrid desaparece e nao mostra nada
usando a opção do HUGOSSOUZA:
Continua travando do mesmo jeito
Alguem tem mais alguma coisa?
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.
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.
tem como dar um exemplo dessa modificação do loop ?
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???
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???
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