Ir para conteúdo

Arquivado

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

CRCJ

Filtrar

Recommended Posts

apresenta%C3%A7%C3%A3o16NJ679HPHW.jpg

 

Srs Boa Tarde

Estou elaborando um sistema em VBNET de contas a pagar e receber, o cadastro eu já consegui fazer.Tenho um formulário de relatório dessas contas onde eu tenho um combo (Pagar, Pago Receber, Recebida) outro combo (Fornecedores) uma TextBox ( Data Inicial ) e outra TextBox (Data Final ) e uma DataGridView e estou precisando filtrar nessa DataGridView o seguinte, por EX:

Todas as contas a Pagar de um Fornecedor ( x ) no período de 11/11/1111 até 22/22/2222, e o resultado será mostrado na DataGridView.

Os dados estão gravados no Access 2007 e estou usando Visual Studio 2010, Segue o código que estou usando, e a tela do relatório.

 

Imports System
Imports System.Data
Imports System.Data.OleDb

Public Class RelaContasCompleto
    Inherits System.Windows.Forms.Form

    ' DataTable que vou carregar e trabalhar...
    Dim dt As DataTable
    Dim ds As New DataSet
    Public conn As OleDbConnection
    Public da As OleDbDataAdapter
    Public cb As OleDbCommandBuilder

    'ABERTURA DO FORMULÁRIO
    Private Sub RelaContasCompleto_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        'CARREGA OS ITENS NO COMBO POSIÇÃO DA CONTA
        CmbPosicaoConta.Items.Add("Pagar")
        CmbPosicaoConta.Items.Add("Pago")
        CmbPosicaoConta.Items.Add("Receber")
        CmbPosicaoConta.Items.Add("Recebida")

        CmbPosicaoConta.Focus()
        btnFiltrar.Text = "Filtrar"

        'FAZ A CONEXÃO COM O BANCO DE DADOS E CARREGA A LISTA DE FORNECEDORES NO COMBO FORNECEDOR
        CmbFornecedor.Items.Clear() ' Apaga os itens existentes. Previne a duplicação dos mesmos
        Dim ligação As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=..\cadastro.mdb;jet oledb:database password=adm"
        Dim sintaxe As String = "Select * From Fornecedor where fornecedor<>null order by fornecedor asc"
        Dim conecção As New OleDbConnection(ligação)
        Dim command As New OleDbCommand(sintaxe, conecção)
        conecção.Open()
        Dim leitor As OleDbDataReader = command.ExecuteReader()
        If leitor.HasRows Then
            While leitor.Read
                CmbFornecedor.Items.Add(leitor.Item("fornecedor"))
            End While
        End If
        conecção.Close()
        sintaxe = Nothing
        conecção = Nothing

        ObterDados()
    End Sub
    'CARREGA TODOS OS DADOS NO FORMÚLÁRIO CONTAS
    Private Sub ObterDados()
        Dim aut As New Contas()
        dt = aut.GetContas()
        dgContas.DataSource = dt
        dgContas.ReadOnly = True

        txtCodigo.DataBindings.Clear()
        TxtDataRecebimento.DataBindings.Clear()
        TxtDataVencimento.DataBindings.Clear()
        TxtValor.DataBindings.Clear()
        TxtTipo.DataBindings.Clear()
        TxtPosicaoConta.DataBindings.Clear()
        TxtDocumento.DataBindings.Clear()
        TxtFornecedor.DataBindings.Clear()
        txtCodigoBarras.DataBindings.Clear()
        Me.txtTotal.Text = ""

        'ALINHA TODAS AS COLUNAS DO DATA GRID VIEW E FORMATA O TAMANHO
        For Each columns As DataGridViewColumn In Me.dgContas.Columns
            Me.dgContas.Columns(columns.Index).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
        Next

        'ALINHA AS COLUNAS E DIMENCIONA A LARGURA NO MODO INDIVIDUAL E ALTERA O NOME DA COLUNA
        'Código
        dgContas.Columns(0).HeaderText = "Código"
        dgContas.Columns(0).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
        'Data Do Recebimento
        dgContas.Columns(1).HeaderText = "Recebimento"
        dgContas.Columns(1).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
        dgContas.Columns(1).Width = 80
        ''Data Do Vencimento
        dgContas.Columns(2).HeaderText = "Vencimento"
        dgContas.Columns(2).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
        dgContas.Columns(2).Width = 80
        'Valor
        dgContas.Columns(3).HeaderText = "Valor"
        dgContas.Columns(3).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
        dgContas.Columns(3).Width = 120
        'Nº Do Documento
        dgContas.Columns(4).HeaderText = "Documento"
        dgContas.Columns(4).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
        dgContas.Columns(4).Width = 105
        'Tipo
        dgContas.Columns(5).HeaderText = "Tipo"
        dgContas.Columns(5).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft
        dgContas.Columns(5).Width = 120
        'Posição Da conta
        dgContas.Columns(6).HeaderText = "Posição"
        dgContas.Columns(6).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft
        dgContas.Columns(6).Width = 70
        'Novo Vencimento
        dgContas.Columns(7).HeaderText = "Novo Vencimento"
        dgContas.Columns(7).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
        dgContas.Columns(7).Width = 80
        'Novo Valor
        dgContas.Columns(8).HeaderText = "Novo Valor"
        dgContas.Columns(8).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
        dgContas.Columns(8).Width = 120
        'Acréscimo
        dgContas.Columns(9).HeaderText = "Acréscimo"
        dgContas.Columns(9).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
        dgContas.Columns(9).Width = 120
        'Fornecedor
        dgContas.Columns(10).HeaderText = "Fornecedor"
        dgContas.Columns(10).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft
        dgContas.Columns(10).Width = 200
        'Banco
        dgContas.Columns(11).HeaderText = "Banco"
        dgContas.Columns(11).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft
        dgContas.Columns(11).Width = 150
        'Código De Barras
        dgContas.Columns(12).HeaderText = "Código De Barras"
        dgContas.Columns(12).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
        dgContas.Columns(12).Width = 150
        'Obs
        dgContas.Columns(13).HeaderText = "Obs"
        dgContas.Columns(13).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft
        dgContas.Columns(13).Width = 150

        'CARREGA TODOS OS DADOS NA DATA GRID VIEW E MOSTRA NOS TEXT BOX
        txtCodigo.DataBindings.Add("Text", dt, "codigo")
        TxtDataRecebimento.DataBindings.Add("Text", dt, "recebimento", (Funcoes.OpcaoFormata.ForData))
        TxtDataVencimento.DataBindings.Add("Text", dt, "vencimento", (Funcoes.OpcaoFormata.ForData))
        TxtValor.DataBindings.Add("Text", dt, "valor")
        TxtTipo.DataBindings.Add("Text", dt, "tipo")
        TxtPosicaoConta.DataBindings.Add("Text", dt, "posicaoconta")
        TxtDocumento.DataBindings.Add("Text", dt, "documento")
        TxtFornecedor.DataBindings.Add("Text", dt, "fornecedor")
        txtCodigoBarras.DataBindings.Add("Text", dt, "codigobarras")

        'DEFINE A COR DO CABEÇALHO
        Dim estilo_cabecalho As New DataGridViewCellStyle
        estilo_cabecalho.BackColor = Color.LightYellow
        dgContas.Columns(0).HeaderCell.Style = estilo_cabecalho
        dgContas.Columns(1).HeaderCell.Style = estilo_cabecalho
        dgContas.Columns(2).HeaderCell.Style = estilo_cabecalho
        dgContas.Columns(3).HeaderCell.Style = estilo_cabecalho
        dgContas.Columns(4).HeaderCell.Style = estilo_cabecalho
        dgContas.Columns(5).HeaderCell.Style = estilo_cabecalho
        dgContas.Columns(6).HeaderCell.Style = estilo_cabecalho
        dgContas.Columns(7).HeaderCell.Style = estilo_cabecalho
        dgContas.Columns(8).HeaderCell.Style = estilo_cabecalho
        dgContas.Columns(9).HeaderCell.Style = estilo_cabecalho
        dgContas.Columns(10).HeaderCell.Style = estilo_cabecalho
        dgContas.Columns(11).HeaderCell.Style = estilo_cabecalho
        dgContas.Columns(12).HeaderCell.Style = estilo_cabecalho
        dgContas.Columns(13).HeaderCell.Style = estilo_cabecalho
        ' desabilita o estilo visual do cabecalho
        dgContas.EnableHeadersVisualStyles = False

        'DEFINE A COR DAS LINHAS
        For x As Integer = 1 To dgContas.Rows.Count Step 1
            If x Mod 2 = 0 Then
                dgContas.Rows(x - 1).DefaultCellStyle.BackColor = Color.Gainsboro
            Else
                dgContas.Rows(x - 1).DefaultCellStyle.BackColor = Color.White
            End If
        Next
    End Sub


End Class

Compartilhar este post


Link para o post
Compartilhar em outros sites

itipps, bom dia

 

A minha dúvida é que eu quero filtrar por exemplo:

Ttodas as Contas a ( Pagar ) de um Fornecedor ( x ) no período de 11/11/1111 até 22/22/2222, e o resultado será mostrado na DataGridView. O código que eu postei, eu só consigo filtrar todas as contas a Pagar de todos os fornecedores e todas as datas, e o que eu quero e filtrar individualmente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

É isso que o Khaos disse.

 

Na clausula WHERE da sua query, passe os valores dos campos como parametro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso eu já fiz, só que eu consegui filtrar por exemplo pagar com uma data, o que eu não estou conseguinfo fazer é por exemplo:

No Combo ( Pagar )

No Combo ( Fornecedor(X) )

entre TextBoxDataInicial ( 01/12/2014 ) eTextBoxDataFinal ( 01/02/2015 ).

o resultado é filtrado na Grid

Compartilhar este post


Link para o post
Compartilhar em outros sites

KhaosDoctor, bom dia

É isso mesmo eu só estou conseguindo filtrar por um só campo ( Pagar, Pago, Receber, Recebida) que está no compo PosicaoConta, segue o código.

 

Private Sub btnFiltrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFiltrar.Click
If btnFiltrar.Text = "Filtrar" Then
If Trim(CmbPosicaoConta.Text) = "" Then
If MsgBox("VOÇE DEVE ESCOLHER UMA POSIÇÃO DA CONTA", MsgBoxStyle.Information, "POSIÇÃO DA CONTA") Then ': Exit Sub
CmbPosicaoConta.Focus()
Exit Sub
End If
End If
End If

da = New OleDbDataAdapter
ds = New DataSet
conn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=..\cadastro.mdb;jet oledb:database password=adm")
da = New OleDbDataAdapter("SELECT * FROM Contas WHERE posicaoconta LIKE '" & CmbPosicaoConta.Text & "%' ", conn)
cb = New OleDbCommandBuilder(da)

ObterDados()
da.Fill(ds, "Cadastro")
dgContas.DataSource = ds.Tables(0)
btnFiltrar.Text = "Todos"
Else
btnFiltrar.Text = "Filtrar"
ObterDados()
Dispose()
Dim f As New RelaContasCompleto
f.Show()
End If
End Sub

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema é que você está fazendo uma query para cada tipo de where, por que você não constrói a sua query de acordo com os filtros? Se o usuário marca um filtro, você adiciona a uma string o where necessário e depois concatena tudo no SQL.

Compartilhar este post


Link para o post
Compartilhar em outros sites

KhaosDoctor, boa tarde

Mas é isso que eu não sei fazer, sou iniciante no VBNET, pode me ajudar com um exemplo de código ?.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você vai ter que ter um evento em cada um dos filtros, existe uma possibilidade de fazer uma rotina, mas seria mais complicada. E ai você criaria uma variável global no escopo da classe e vai concatenando as partes do where a medida que os filtros sofrem mudança (isso você faz em cada evento).

 

Não tem muito o que explicar, dá uma pesquisada em concatenação de strings, ou stringbuilder e ai no final você faz algo do tipo:

Dim whereClause as String = "<sua concatenação>"
Dim SQLFinal as String = "Seu SQL" & whereClause

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.