Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #59 da revista programar. Faz já o download aqui!

lucio

Consulta linq no evento ComboBox_SelectedIndexChanged não funciona.

Mensagens Recomendadas

lucio    0
lucio

Tenho duas tabelas com as seguintes estruturas:

Caixa:

idCaixa-Data-idFormaPagamento-Descricao-Entrada-Saida

FormaPagamento:

idFormaPagamento-Descricao-Tipo

1                              Cheque      C

2                              Pgto Forne D

3                              Dinheiro    C

E o seguinte código em vb.net:

Dim tipoPagamento as Char 'variável global

Private Sub carregaComboBox()

      Dim formaPagamento = From f In bd.FormaPagamentos Select f
      cboFormaPagamento.Items.Clear()
      cboFormaPagamento.DataSource = formaPagamento
      cboFormaPagamento.DisplayMember = "Descricao"
      cboFormaPagamento.ValueMember = "idFormaPagamento"

End Sub

Private Sub carregaGrid()

      Dim caixa = From c In bd.Caixas Select c.idCaixa, c.Data, c.idFormaPagamento, c.Descricao, c.Entrada, c.Saida
      dgvCaixa.DataSource = caixa.ToList 

End Sub

Private Sub frmCaixa_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        
        carregaGrid()
        carregaComboBox()

End Sub

Private Sub btnSalvar_Click(sender As System.Object, e As System.EventArgs) Handles btnSalvar.Click
        
        Dim caixa As New Caixa
        With caixa
            .Data = dtpDataLancamento.Value
            .idFormaPagamento = cboTipoLancamento.SelectedValue
            .Descricao = txtDescricao.Text
            If tipoPagamento = "C" Then
                .Entrada = txtValor.Text 'se SelectedValue = 3 => C
            Else
                .Saida = txtValor.Text 'se SelectedValue = 2 => D
            End If
           .Saldo = txtValor.Text
        End With
        bd.Caixas.InsertOnSubmit(caixa)
        bd.SubmitChanges()
        carregaGrid()

End Sub

Private Sub cboFormaPagamento_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles cboFormaPagamento.SelectedIndexChanged
        
        'consulta linq responsável em retornar o tipo de pagamento (C/D)
        Dim formaPagamento = From f In bd.FormaPagamentos, c In bd.Caixas Where f.idFormaPagamento = c.idFormaPagamento
                             Select f.idFormaPagamento, f.Tipo, c.idCaixa
        tipoPagamento = formaPagamento.ToList.Item(0).Tipo.ToString

End Sub

O trecho If Else deveria funcionar da seguinte maneira (se tipoPagamento for C, então Entrada recebe txtValor, senão Saida recebe txtValor), porém não funciona porque tipoPagamento é sempre C.

Gostaria de saber onde está o erro? Fiz a consulta linq no evento SelectedIndexChanged do ComboBox, porém não funciona como eu gostaria.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Caça    24
Caça

Estás a fazer isto

If tipo = "C" Then

não deveria ser antes isto?

If tipoPagamento = "C" Then


Pedro Martins

Não respondo a duvidas por PM

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Caça    24
Caça

Uma vez que estás a fazer a consulta

From f In bd.FormaPagamentos Select f

para carregar a combo, podes tirar de lá o tipo de pagamento, basta converter o valor da Propriedade DataSource da ComboBox para o tipo retornado pela consulta para obteres o valor.


Pedro Martins

Não respondo a duvidas por PM

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
lucio    0
lucio

Problema resolvido. Achei um código parecido com o meu neste link:

https://sites.google.com/site/programacaoonline/family-blog/c/alimentar-dois-controles-combobox-com-linq-to-sql-em-c

Depois adaptei-o as minhas necessidades e também corrigi alguns bugs.

O meu código ficou assim:

Dim tipoPagamento As Char 'variável global

Private Sub carregaComboBox()

      Dim formaPagamento = From f In bd.FormaPagamentos Select f
      cboFormaPagamento.Items.Clear()
      cboFormaPagamento.DataSource = formaPagamento
      cboFormaPagamento.DisplayMember = "Descricao"
      cboFormaPagamento.ValueMember = "idFormaPagamento"

End Sub

Private Sub carregaGrid()

      Dim caixa = From c In bd.Caixas Select c.idCaixa, c.Data, c.idFormaPagamento, c.Descricao, c.Entrada, c.Saida
      dgvCaixa.DataSource = caixa.ToList 

End Sub

Private Sub frmCaixa_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        
        carregaGrid()
        carregaComboBox()

End Sub

Private Sub btnSalvar_Click(sender As System.Object, e As System.EventArgs) Handles btnSalvar.Click
        
        Dim caixa As New Caixa
        With caixa
            .Data = dtpDataLancamento.Value
            .idFormaPagamento = cboFormaPagamento.SelectedValue
            .Descricao = txtDescricao.Text
            If tipoPagamento = "C" Then
                .Entrada = txtValor.Text 'se SelectedValue = 3 => C
            Else
                .Saida = txtValor.Text 'se SelectedValue = 2 => D
            End If
        End With
        bd.Caixas.InsertOnSubmit(caixa)
        bd.SubmitChanges()
        carregaGrid()

End Sub

Private Sub cboFormaPagamento_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles cboFormaPagamento.SelectedIndexChanged
        
        'rotina responsável em retornar o tipo de pagamento (C/D)
        Dim IDformaPagamento As Integer = 0
        If Integer.TryParse(cboFormaPagamento.SelectedValue.ToString(), IDformaPagamento) Then
            Dim formaPagamento = From f In bd.FormaPagamentos Where f.idFormaPagamento = IDformaPagamento 
                                 Select f.Descricao, f.Tipo
            tipoPagamento = formaPagamento.ToList.Item(0).Tipo.ToString()          
        End If

End Sub

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.