Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

felipemsilva

MsFlexGrid lista colunas de uma tabela e linhas de outra

Recommended Posts

Amigos,

 

Sou iniciante em vb e gostaria da ajuda de vcs.

Meu sistema irá cadastrar produtos para criaçao de ordens de produção.

Para isso ele tem que ter a informação de cores e tamanhos de cada produto, como por exemplo, o produto 1 é fab na cor preta no tam p, ja o produto 2 e fabricado na cor preta nos tamanhos pmg. Até aí td bem.

 

Na tela de cad de grades do produto eu preciso que um grid apresente na parte de cima (cabeçalho) os tamanhos da tabela tamanhos e nas linhas as cores cadastradas e me informe os dados clicados com checkbox....

Eu já procurei em todos os tutoriais possíveis e não achei nada, POR FAVOR ME AJUDEM...

 

Segue esquema do que eu preciso:

           p    m   g   gg   u   ...(lista tamanhos)
branco     x    x
preto
azul                    x
...
(lista cores)

Para isso eu criei 3 tabelas no access:

 

TABELA COR

Campos:

código_cor

cor

 

TABELA TAMANHO

Campos:

código_tamanho

tamanho

 

TABELA PRODUTOS

Campos:

código_produto

descrição

 

TABELA PRODUTOS_ITENS

Campos:

código_item

código_produto

código_cor

código_tamanho

 

Por favor me ajudem!

 

Abraços...

 

Imagem Postada

Compartilhar este post


Link para o post
Compartilhar em outros sites

Algumas perguntas:

 

1. Você não precisa que nesse grid apareça o nome do produto nem nada referente a ele não né. Os dados que vão aparecer são somente esses mesmo?

 

2. Os nomes das cores e dos tamanhos são fixos? Ou seja, sempre serão as mesmas cores e mesmos tamanhos disponíveis ou são variáveis de acordo com o que você tem na tabela?

 

3. Você já tem alguma coisa pronta do seu grid? POde postar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Algumas perguntas:

 

1. Você não precisa que nesse grid apareça o nome do produto nem nada referente a ele não né. Os dados que vão aparecer são somente esses mesmo?

 

2. Os nomes das cores e dos tamanhos são fixos? Ou seja, sempre serão as mesmas cores e mesmos tamanhos disponíveis ou são variáveis de acordo com o que você tem na tabela?

 

3. Você já tem alguma coisa pronta do seu grid? POde postar?

 

Ola Claudio,

 

Obrigado desde já pela ajuda.

Bem vamos lá:

 

1- Nao preciso, somente os dados das cores e tamanhos...

2 - Os nomes são variaveis de acordo com a tabela... as colunas seriam um loop dos tamanhos da tabela tamanhos e as linhas um loop da tabela cores...

3 - Não tenho nada pronto...

 

Valeu!

 

Felipe

Compartilhar este post


Link para o post
Compartilhar em outros sites

Claudio,

 

Eu achei o que eu preciso em outro forum so nao consigo automatizar listando as cores e tamanhos...

 

Segue código

 

Para automatizar eu teria que listar os valores da tabela produtos_itens e verificar se o codigo da cor coincide com o codigo do tamanho e marcar como checked...

 

Exemplo:
TABELA PRODUTOS_ITENS
Campos:
código_item                          1
código_produto                       7482
código_cor                           1 (branco)
código_tamanho                       1 (p)

No exemplo acima, no grid apareceria como ckecked o tamanho p cor branco...

 

'Realmente muito simples e prático, parabéns ao autor!!
'***************************************************
'Para rodar o exemplo abaixo crie um projeto, coloque um flexgrid e cole o código abaixo:

Const strChecked = "þ"
Const strUnChecked = "q"

Dim tabela_cor
Dim tabela_tamanho

'*********************************************************************************************************
Private Sub cor()
ConexaoDAO
Set tabela_cor = BD.OpenRecordset("select * from cor", _
                     dbOpenDynaset)
    'VERIFICA SE TEM REGISTRO OU NÃO
    If tabela_cor.RecordCount > 0 Then
        
        'MOVE REGISTRO PARA O PRIMEIRO
        tabela_cor.MoveFirst
    Else
    ' FIM
    MsgBox "Sem registros cores..."
    End If
End Sub

Private Sub tamanho()
ConexaoDAO
Set tabela_tamanho = BD.OpenRecordset("select * from tamanhos", _
                     dbOpenDynaset)
    'VERIFICA SE TEM REGISTRO OU NÃO
    If tabela_tamanho.RecordCount > 0 Then
        
        'MOVE REGISTRO PARA O PRIMEIRO
        tabela_tamanho.MoveFirst
    Else
    ' FIM
    MsgBox "Sem registros tamanhos..."
    End If
End Sub

'*********************************************************************************************************

Private Sub Form_Resize()
'    MSFlexGrid1.Width = Me.ScaleWidth
'    MSFlexGrid1.Height = Me.ScaleHeight
End Sub

Private Sub TriggerCheckbox(iRow As Integer, iCol As Integer)
        With MSFlexGrid1
            If .TextMatrix(iRow, iCol) = strUnChecked Then
                .TextMatrix(iRow, iCol) = strChecked
            Else
                .TextMatrix(iRow, iCol) = strUnChecked
            End If
        End With
End Sub

Private Sub MSFlexGrid1_KeyPress(KeyAscii As Integer)
    If KeyAscii = 13 Or KeyAscii = 32 Then 'Enter/Space
        With MSFlexGrid1
            Call TriggerCheckbox(.Row, .Col)
        End With
    End If
End Sub

Private Sub MSFlexGrid1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
    If Button = 1 Then
        With MSFlexGrid1
            If .MouseRow <> 0 And .MouseCol <> 0 Then
                Call TriggerCheckbox(.MouseRow, .MouseCol)
            End If
        End With
    End If
End Sub

Private Sub Form_Load()
        
        
        With MSFlexGrid1
            .Rows = 10
            .Cols = 3
            
            .AllowUserResizing = flexResizeBoth
                        
            'name the cols
            For i = 1 To .Cols - 1
                .Row = 0
                .Col = i
                .Text = "Column " & i
            Next i
            
            'name the rows
            For i = 1 To .Rows - 1
                .Col = 0
                .Row = i
                .Text = "Row " & i
            Next i
                        
            'define fields as checkbox
            For y = 1 To .Rows - 1
                For x = 1 To .Cols - 1
                    .Row = y
                    .Col = x
                    .CellFontName = "Wingdings"
                    .CellFontSize = 14
                    .CellAlignment = flexAlignCenterCenter
                    .Text = strUnChecked
                Next x
            Next y
        End With
    
End Sub

Por favor me ajude!!

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Claudio,

 

Consegui achar uma solução, segue código abaixo....

Agora eu gostaria da sua ajuda para o preenchimento do grid...

 

Quando ele carrega, ele tem q verficar se o no do tamanho está relacionado ao no da cor e deixar a opção como checked, caso contrário, deixar em branco....

 

A função é essa aqui embaixo:

 

            'define fields as checkbox
            For y = 1 To .Rows - 1
                For x = 1 To .Cols - 1
                    .Row = y
                    .Col = x
                    .CellFontName = "Wingdings"
                    .CellFontSize = 14
                    .CellAlignment = flexAlignCenterCenter
                    .Text = strUnChecked
                Next x
            Next y

Aguardo sua ajuda!

 

Felipe

 


'Realmente muito simples e prático, parabéns ao autor!!
'***************************************************
'Para rodar o exemplo abaixo crie um projeto, coloque um flexgrid e cole o código abaixo:

Const strChecked = "þ"
Const strUnChecked = "q"

Dim tabela_cor
Dim tabela_tamanho

'*********************************************************************************************************
'*********************************************************************************************************

Private Sub Form_Resize()
'    MSFlexGrid1.Width = Me.ScaleWidth
'    MSFlexGrid1.Height = Me.ScaleHeight
End Sub

Private Sub TriggerCheckbox(iRow As Integer, iCol As Integer)
        With MSFlexGrid1
            If .TextMatrix(iRow, iCol) = strUnChecked Then
                .TextMatrix(iRow, iCol) = strChecked
            Else
                .TextMatrix(iRow, iCol) = strUnChecked
            End If
        End With
End Sub

Private Sub MSFlexGrid1_KeyPress(KeyAscii As Integer)
    If KeyAscii = 13 Or KeyAscii = 32 Then 'Enter/Space
        With MSFlexGrid1
            Call TriggerCheckbox(.Row, .Col)
        End With
    End If
End Sub

Private Sub MSFlexGrid1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
    If Button = 1 Then
        With MSFlexGrid1
            If .MouseRow <> 0 And .MouseCol <> 0 Then
                Call TriggerCheckbox(.MouseRow, .MouseCol)
            End If
        End With
    End If
End Sub

Private Sub Form_Load()
    Dim objetoRS   As ADODB.Recordset
    Dim SQLtamanho  As String
    Dim lngLoop As Long
SQLtamanho = "SELECT * FROM tamanhos ORDER BY código_tamanho"
Call AbrirConexaoBD
Set objetoRS = New Recordset
objetoRS.Open SQLtamanho, Conexao, adOpenDynamic, adLockReadOnly, adCmdText
        
    Dim objetoRS2   As ADODB.Recordset
    Dim SQLcor  As String
    Dim lngLoop2 As Long
SQLcor = "SELECT * FROM cor ORDER BY código_cor"
Call AbrirConexaoBD
Set objetoRS2 = New Recordset
objetoRS2.Open SQLcor, Conexao, adOpenDynamic, adLockReadOnly, adCmdText
        
        
Dim Contador2
Contador2 = 0
While Not objetoRS2.EOF
Contador2 = Contador2 + 1
objetoRS2.MoveNext
Wend
        
Dim Contador
Contador = 0
While Not objetoRS.EOF
Contador = Contador + 1
objetoRS.MoveNext
Wend
        If objetoRS.EOF Then
        objetoRS.MoveFirst
        End If
        
        If objetoRS2.EOF Then
        objetoRS2.MoveFirst
        End If

            With MSFlexGrid1
            .Rows = Contador2 + 1
            .Cols = Contador + 1
            
            .ColWidth(0) = 1300
            
            .AllowUserResizing = flexResizeBoth
                        
            'LISTANDO TAMANHOS
            For i = 1 To .Cols - 1
                .Row = 0
                .Col = i
                .Text = objetoRS("tamanho")
                objetoRS.MoveNext
            Next i
            
            'name the rows
            For i = 1 To .Rows - 1
                .Col = 0
                .Row = i
                .Text = objetoRS2("cor")
                objetoRS2.MoveNext
                '"Row " & i
            Next i
                                      
    objetoRS.Close
    Set objetoRS = Nothing

    objetoRS2.Close
    Set objetoRS2 = Nothing
    
            'define fields as checkbox
            For y = 1 To .Rows - 1
                For x = 1 To .Cols - 1
                    .Row = y
                    .Col = x
                    .CellFontName = "Wingdings"
                    .CellFontSize = 14
                    .CellAlignment = flexAlignCenterCenter
                    .Text = strUnChecked
                Next x
            Next y
        End With
    
End Sub



Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.