View Full Version : DataGrids VB6


Ximenes
21-12-2007, 14:53
Boas malta!

Alguem conhece alguma datagrid para o VB6 sem ser aquelas standars que o VB6 ja traz?

e tambem queria saber se as que conhecem dao para por totais ou subtotais e agrupar campos!!

cumps

merry xmas :P

Armadillo
21-12-2007, 15:14
oi.
a mshflexgrid do vb6 permite-te obter dados hierarquicos (daí o h em msHflexgrid).
Em relação ao total é muito simples de o calcular em runtime e mostra-lo na mshflexgrid.

Tens alguma necessidade/requisito em especial para o objecto?

Ximenes
21-12-2007, 15:17
nao sei se ja utilizei esse componente mas procurava algo com um aspecto mais recente, isto porque alguns dos componentes do VB6 ja estao um pouco fracos a nivel de design

EDIT:
exacto! ja utilizei essa...
queria uma com um aspecto melhorado

Armadillo
21-12-2007, 15:22
eu consegui por uma mshflexgrid com o aspecto da datagrid do itunes (á excepção do cabeçalho que fica na mesma com aquele aspecto de botao do win95). se quiseres depois posto a fuunção.
se nao quiseres nenhuma "extensao" na funcionalidade da datagrid, a mshflexgrid serve mto bem (pelo menos falo por mim)

Ximenes
21-12-2007, 15:26
se me puderes enviar agradeço!

ric_mrq@hotmail.com

cumps
obrigado

Armadillo
21-12-2007, 15:40
Public Sub FormataGrelhas(Grelha As MSHFlexGrid, Formulario As Form)
Dim i%, j% 'variaveis da formatação de cores das linhas

Dim r As Long '\
Dim c As Long ' \ variaveis da formatação da largura das celulas
Dim cell_wid As Single ' /
Dim col_wid As Single '/

On Local Error Resume Next

With Grelha 'COMEÇA FORMATAÇÃO
.Refresh
.Redraw = False
DoEvents 'começa a colorir o fundo da grid
If .Rows < 2 Then Exit Sub 'top row is a header
For j = 1 To .Rows - 1
For i = 0 To .Cols - 1
.Row = j
.Col = i
If j Mod 2 = 0 Then
.CellBackColor = &HFAF5F1 'azul claro
Else
.CellBackColor = vbWhite
End If
Next i
Next j
.Row = 1
.Col = 1

End With

'formata espaçamento das celulas
For c = 0 To Grelha.Cols - 1
col_wid = 0
For r = 0 To Grelha.Rows - 1
cell_wid = Formulario.TextWidth(Grelha.TextMatrix(r, c))
If col_wid < cell_wid Then col_wid = cell_wid
Next r
Grelha.ColWidth(c) = col_wid + 120
Next c
Grelha.Redraw = True
End Sub



colocas isto num modulo.
Para usar esta sub, depois de preencheres a tua mshflexgrid usas esta sintaxe:

'...
FormataGrelhas Form1.MSHFlexGrid1, Form1
'...


Enjoy it :003:

Ximenes
21-12-2007, 15:50
thanks

Armadillo
21-12-2007, 15:54
No problem.:msmiley1:

Ximenes
21-12-2007, 15:59
olha, da-me um erro na 1a linha da Sub:

Public Sub FormataGrelhas(Grelha As MSHFlexGrid, Formulario As Form)
erro: "User-defined type not defined"


e eu ja tenho a flexgrid adicionada nas references!

Armadillo
21-12-2007, 16:02
Tens a certeza que é uma msHflexgrid (a referencia é Microsoft Hierarchical FlexGrid 6.0)e nao uma msFlexgrid?

Ximenes
21-12-2007, 16:06
afinal nao tenho nenhuma referencia adicionada sobre as flexgrids, mas tambem nao esta na lista nem essa nem a Microsoft FlexGrid

apesar disto ja a tenho adicionada na toolbox e é uma msFlexGrid

Armadillo
21-12-2007, 16:09
desculpai senhores, nao e referencia mas sim componente.
como adicionar a mshflexgrid:
bto dto rato sobre a toolbox->components->depois encontra um lista com varios componentes e escolhes a da msHflexgrid.

Ximenes
21-12-2007, 16:12
ei pois é :p:p
tens razao!

Armadillo
21-12-2007, 16:13
ja ta funcando??

Ximenes
21-12-2007, 16:17
sim mas tenho que adicionar dados para ver bem o que a Sub faz.

mas sabes se da para agrupar colunas e fazer ordenaçoes, etc?

Armadillo
21-12-2007, 16:29
para agrupar, tens que fazer um query SQL modificado (tens que usar a função SHAPE, procura no msdn que encontras). Procura tambem no indice do msdn por "Hierarchical FlexGrid control". encontras la mais informação detalhada.
Em relação ás ordenações tenho outro naco de codigo pra isso mas nao o tenho comigo :(

Ximenes
21-12-2007, 16:36
ok obrigado.

eu vou explorar melhor!

Ximenes
26-12-2007, 18:09
ja adicionei dados! falta agora saber como colocar totais.

alguem sabe como colocar totais? ja andei a procura e encontrei um exemplo mas acho um pouco complicado de mais...

cumps

Armadillo
27-12-2007, 09:20
lês todos os valores de determinada coluna e vais somando.
Depois adicionas uma linha com o total.


'...pode ter erros...
me.MSHFlexGrid1.Col = 2

for i=0 to me.mshflexgrid1.rows-1
Me.MSHFlexGrid1.Row = Me.MSHFlexGrid1.Row + 1
total = total + CDbl(Me.MSHFlexGrid1.Text)
next i

Ximenes
27-12-2007, 15:25
thanks