Ir para conteúdo
Fórum Script Brasil
  • 0

Colocando listbox numa coluna do datagrid


Macêdo

Pergunta

Vamos com este código incrementar numa coluna do datagrid uma ListBox, que dará opções de alteração no Banco de Dados, para isto vamos precisar fazer referencia à Biblioteca Microsoft ActiveX Data Objects 2.8 Library, pois iremos utilizar ADO para interagir com o BD, para isto va ao menu Project\References e na caixa de dialogo escolha "Microsoft ActiveX Data Objects 2.8 Library"

Para começar teremos que criar um BD com nome "BD" e uma tabela de nome "TABELA" com os seguintes campos:

COD

NOME

PAGO

PAGAMENTO

Após criado o banco insira alguns registros nele, ex:

COD = 1

NOME = MACEDO

PAGO = SIM

PAGAMENTO = CHEQUE

COD = 2

NOME = KUROI

PAGO = SIM

PAGAMENTO = CARTÃO

Agora no Form insira um Controle DataGrid e uma ListBox

Deixe a propriedade VISIBLE da List = FALSE

Agora pode copiar todo o código abaixo e executar sua aplicação, mas após ver o que acontece não deixe de estudar o código, pois o fiz todo comentado para ser estudado:

No General Declarations:

'declarando objetos necessarios
Dim cnn As New ADODB.Connection 'conexão
Dim cmd As New ADODB.Command 'command
Dim rs As New ADODB.Recordset 'recordset
Const indice_da_coluna = 3  'coluna onde será mostrada
'a listbox com itens para alterar o BD
No restante do FORM:
Private Sub conectar() 'String de conexão

cnn.ConnectionString = "provider = microsoft.jet.oledb.4.0;" & _
"data Source = " & App.Path & "\BD.mdb;"
cnn.CursorLocation = adUseClient
cnn.Open

End Sub

'carrega o rs com dados da tabela
Private Sub carrega_rs()

With cmd
    .ActiveConnection = cnn
    .CommandType = adCmdText
    .CommandText = "select * from tabela"
    Set rs = .Execute
End With

End Sub

'preenche o datagrid com os dados do RS
Private Sub preenche_datagrid()
With rs
    Set DataGrid1.DataSource = rs
    DataGrid1.MarqueeStyle = dbgHighlightRowRaiseCell
    'codigo abaixo lança a lisbox na coluna
    DataGrid1.Columns(indice_da_coluna).Button = True
End With
End Sub

Private Sub lista() 'carrega a listbox com os itens
With List1
   .AddItem "CHEQUE"
   .AddItem "DINHEIRO"
   .AddItem "CARNÊ"
   .AddItem "BOLETO"
   .AddItem "CARTÃO"
End With

End Sub

Private Sub Form_Load()
conectar 'conecta com o banco, abre a conexão
carrega_rs 'carrega o recordset
preenche_datagrid 'popula o datagrid
lista 'carrega o listbox com os itens
End Sub

  'mostra a lista na coluna selecionada
Private Sub DataGrid1_ButtonClick(ByVal ColIndex As Integer)

Dim coluna As Column
  
  If indice_da_coluna = indice_da_coluna Then
     Set coluna = DataGrid1.Columns(indice_da_coluna)
     
     With List1
        .Left = DataGrid1.Left + coluna.Left
        .Top = DataGrid1.Top + DataGrid1.RowTop(DataGrid1.Row) + DataGrid1.RowHeight
        .Width = coluna.Width + 15
        .ListIndex = 0
        .Visible = True
        .ZOrder 0
        .SetFocus
     End With
  
  End If
End Sub

Private Sub List1_dblClick()
'altera o registro da tabela para o valor selecionado
'na listbox
With cmd
.ActiveConnection = cnn
.CommandType = adCmdText
.CommandText = " update TABELA set " & _
" PAGAMENTO = '" & List1.Text & "'" & _
"where cod = " & DataGrid1.Columns.Item(0) & ";"
.Execute
End With
List1.Visible = False
carrega_rs
preenche_datagrid
End Sub
'limpa o cmd e rs ao fechar o form
Private Sub Form_Unload(Cancel As Integer)

Set cmd = Nothing
Set rs = Nothing
End Sub

O que acontece: ao clicar nas linhas da coluna PAGAMENTO abre-se a List com os itens, e dando duplo click na list a celula do Datagrid assume o novo valor pois o BD foi alterado no registro e campo correspondente

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...