CRCJ 0 Denunciar post Postado Janeiro 8, 2015 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
itlpps 109 Denunciar post Postado Janeiro 9, 2015 Qual sua dúvida? Compartilhar este post Link para o post Compartilhar em outros sites
CRCJ 0 Denunciar post Postado Janeiro 9, 2015 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
KhaosDoctor 242 Denunciar post Postado Janeiro 9, 2015 Mas isso seria um problema de WHERE, basta você montar um where individual para cada campo. Ai você meio que concatena as strings Compartilhar este post Link para o post Compartilhar em outros sites
itlpps 109 Denunciar post Postado Janeiro 9, 2015 É 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
CRCJ 0 Denunciar post Postado Janeiro 9, 2015 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 242 Denunciar post Postado Janeiro 10, 2015 Você só está conseguindo fazer com um campo? Compartilhar este post Link para o post Compartilhar em outros sites
CRCJ 0 Denunciar post Postado Janeiro 12, 2015 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 IfEnd Sub Compartilhar este post Link para o post Compartilhar em outros sites
KhaosDoctor 242 Denunciar post Postado Janeiro 12, 2015 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
CRCJ 0 Denunciar post Postado Janeiro 12, 2015 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
KhaosDoctor 242 Denunciar post Postado Janeiro 13, 2015 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