none
como filtrar datagridview pela data da coluna c# RRS feed

  • Pergunta

  • ola pessoal

    como posso filtrar a coluna 8 do datagridviw atraves da data que aparece.

    o usuario escolheria no DateTimePickler o dia inicial e dia final para que aparecesse no gridview.

    isso é possivel?

    aguardo uma sugestao.

    domingo, 1 de abril de 2012 12:03

Respostas

  • Cara, cara, cara tu estas a complicar as coisas....

    Faz o seguinte, no top do teu form1, declara uma variavel:

    Bindingsource meu_filtro = new Bindingsource;

    agora no form_load escreve este codigo;

               DataTable cliente = new DataTable();          
               da.Fill(cliente);   

               meu_filtro.datasource =cliente; 

                dgv.DataSource =  meu_filtro;

    -------------------------------//-----------------------------------------------------------------------------------

    como o teu bindingsource e publico voce pode usar em qualqer parte do form.

    agora no teu botao pesquizar coloca o filtro assim:

     private void button2_Click(object sender, EventArgs e)
            {
                meu_filtro.Filter = "ID = '" + this.dateTimePicker1.Value.Date + "'";
            }
                


    One word frees us of all the weight and pain of life: that word is love.

    domingo, 1 de abril de 2012 22:02
    Moderador
  • Você pode também adicionar um código no dg:

    private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) { //if é a coluna de data? DateTimePicker DTP = new DateTimePicker(); DTP.ValueChanged += new EventHandler(Evento); this.Controls.Add(DTP); }

            private void Evento(object sender, EventArgs e)
            {
                //código para setar data e tempo
            }



    Só que o que o Malange recomendou é mais prático e correto.
    domingo, 1 de abril de 2012 21:07

Todas as Respostas

  • Denovo, o trabalho fica facil se voce vincular o teu datagridview com um bindigsource.

    depois filta com dtpicker

    source.Filter = "DNC = '" +  dateTimePicker1.Value.Date + "'";


    One word frees us of all the weight and pain of life: that word is love.

    domingo, 1 de abril de 2012 13:22
    Moderador
  • Você pode também adicionar um código no dg:

    private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) { //if é a coluna de data? DateTimePicker DTP = new DateTimePicker(); DTP.ValueChanged += new EventHandler(Evento); this.Controls.Add(DTP); }

            private void Evento(object sender, EventArgs e)
            {
                //código para setar data e tempo
            }



    Só que o que o Malange recomendou é mais prático e correto.
    domingo, 1 de abril de 2012 21:07
  • Você pode também adicionar um código no dg:

    private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) { //if é a coluna de data? DateTimePicker DTP = new DateTimePicker(); DTP.ValueChanged += new EventHandler(Evento); this.Controls.Add(DTP); }

            private void Evento(object sender, EventArgs e)
            {
                //código para setar data e tempo
            }



    Só que o que o Malange recomendou é mais prático e correto.

    airton

    não entendi mt bem.... é pq tb sou iniciante.

    vou tentar explicar melhor pra ver se é isso mesmo que tenho q fazer.

    eu tenho o datagrideview preenchido com as informaçoes do meu BD SQL.

    está assim (resumo).

     DataTable cliente = new DataTable();          
                da.Fill(cliente);         
                dgv.DataSource = cliente;

    quero colocar em um form um butao pesquisar onde o usuário escolheria em dois datetimePickler data inicial e data final para filtrar e estes dados apareceriam no datagridview. neste caso a sua sugestão ainda é valida? no aguardo de suas orientações.











    domingo, 1 de abril de 2012 21:43
  • Cara, cara, cara tu estas a complicar as coisas....

    Faz o seguinte, no top do teu form1, declara uma variavel:

    Bindingsource meu_filtro = new Bindingsource;

    agora no form_load escreve este codigo;

               DataTable cliente = new DataTable();          
               da.Fill(cliente);   

               meu_filtro.datasource =cliente; 

                dgv.DataSource =  meu_filtro;

    -------------------------------//-----------------------------------------------------------------------------------

    como o teu bindingsource e publico voce pode usar em qualqer parte do form.

    agora no teu botao pesquizar coloca o filtro assim:

     private void button2_Click(object sender, EventArgs e)
            {
                meu_filtro.Filter = "ID = '" + this.dateTimePicker1.Value.Date + "'";
            }
                


    One word frees us of all the weight and pain of life: that word is love.

    domingo, 1 de abril de 2012 22:02
    Moderador
  • A tá. Entendi mal. Pensei que você queria que aparecesse um Data Picker para setar uma data em cada linha do datagrid.

    Isso que o Malange falou é o que você quer.

    domingo, 1 de abril de 2012 22:42
  • Cara, cara, cara tu estas a complicar as coisas....

    Faz o seguinte, no top do teu form1, declara uma variavel:

    Bindingsource meu_filtro = new Bindingsource;

    agora no form_load escreve este codigo;

               DataTable cliente = new DataTable();          
               da.Fill(cliente);   

               meu_filtro.datasource =cliente; 

                dgv.DataSource =  meu_filtro;

    -------------------------------//-----------------------------------------------------------------------------------

    como o teu bindingsource e publico voce pode usar em qualqer parte do form.

    agora no teu botao pesquizar coloca o filtro assim:

     private void button2_Click(object sender, EventArgs e)
            {
                meu_filtro.Filter = "ID = '" + this.dateTimePicker1.Value.Date + "'";
            }
                


    One word frees us of all the weight and pain of life: that word is love.

    Malange

    está dando bug.

    fala que o da e dgv nao existem no contesto atual.

    eu tenho uma classe chamada conexao.

    está assim:

     public static string conectar = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\ControleFrota.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
            SqlConnection conn = new SqlConnection(conectar);
            SqlCommand cmd = null;
            public void Consultar(DataGridView dgv, string Sql)
            {
                cmd = new SqlCommand(Sql, conn);
                conn.Open();         
                cmd.CommandType = CommandType.Text;           
                SqlDataAdapter da = new SqlDataAdapter(cmd);           
                DataTable cliente = new DataTable();            
                da.Fill(cliente);            
                dgv.DataSource = cliente;            
                conn.Close();

    deve ser este o problema.

    certo?

    domingo, 1 de abril de 2012 22:46
  • Sim o problema esta no void, vais de trocar. o teu codico vai ficar assim:

    namespace Windows_Teste
    {
        public partial class Form1 : Form
        {
            BindingSource meu_filtro;// declara o bindingsource aki
            public Form1()
            {
                meu_filtro = new BindingSource(); // aki voce instancia
                InitializeComponent();
            }

            private void Form1_Load(object sender, EventArgs e)
            {

               meu_filtro.DataSource = Consulta("Select * From Tablea");

            }
            private DataTable Consultar(string Sql_Consulta)

            {
                OleDbConnection conecao = new OleDbConnection("Escreve aki a tua conecao");
                OleDbCommand comandos = new OleDbCommand();
                DataTable cliente = new DataTable();
                try
                {
                    comandos.CommandType = CommandType.Text;
                    comandos.CommandText = Sql_Consulta.ToString();

                    conecao.Open();
                    OleDbDataAdapter adater = new OleDbDataAdapter();
                    adater.InsertCommand = comandos;
                    adater.Fill(cliente);
                    }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message.ToString());
                }
                finally { conecao.Close(); }
                return cliente; 
                }

    agora no botao pesquizar :

     private void button2_Click(object sender, EventArgs e)
            {
                meu_filtro.Filter = "Nomedocampo = '" + this.dateTimePicker1.Value.Date + "'";
            }


    One word frees us of all the weight and pain of life: that word is love.

    segunda-feira, 2 de abril de 2012 22:12
    Moderador
  • Sim o problema esta no void, vais de trocar. o teu codico vai ficar assim:

    namespace Windows_Teste
    {
        public partial class Form1 : Form
        {
            BindingSource meu_filtro;// declara o bindingsource aki
            public Form1()
            {
                meu_filtro = new BindingSource(); // aki voce instancia
                InitializeComponent();
            }

            private void Form1_Load(object sender, EventArgs e)
            {

               meu_filtro.DataSource = Consulta("Select * From Tablea");

            }
            private DataTable Consultar(string Sql_Consulta)

            {
                OleDbConnection conecao = new OleDbConnection("Escreve aki a tua conecao");
                OleDbCommand comandos = new OleDbCommand();
                DataTable cliente = new DataTable();
                try
                {
                    comandos.CommandType = CommandType.Text;
                    comandos.CommandText = Sql_Consulta.ToString();

                    conecao.Open();
                    OleDbDataAdapter adater = new OleDbDataAdapter();
                    adater.InsertCommand = comandos;
                    adater.Fill(cliente);
                    }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message.ToString());
                }
                finally { conecao.Close(); }
                return cliente; 
                }

    agora no botao pesquizar :

     private void button2_Click(object sender, EventArgs e)
            {
                meu_filtro.Filter = "Nomedocampo = '" + this.dateTimePicker1.Value.Date + "'";
            }


    One word frees us of all the weight and pain of life: that word is love.

    Ola Malange.

    apresentou este erro no load, mas creio estar mt próximo da solução:

    {"A propriedade SelectCommand não foi inicializada antes de chamar 'Fill'."}

    entao mudei o codigo. Parou de dar o erro, porem não pesquisou.

    ficou assim:

               

     public void Form1_Load(object sender, EventArgs e)
            {
                negocio.PreencherDataGridManutencao(tb_ManutencaoDataGridView);
                if (frmLogin.usuarioConectado == "Operador")
                    toolStripExcluir.Enabled = false;           
                this.tb_CondutorTableAdapter.Fill(this.controleFrotaDataSet.tb_Condutor);            
                this.tb_FornecedorTableAdapter.Fill(this.controleFrotaDataSet.tb_Fornecedor);           
                this.tb_veiculoTableAdapter.Fill(this.controleFrotaDataSet.tb_veiculo);          
                this.tb_ManutencaoTableAdapter.Fill(this.controleFrotaDataSet.tb_Manutencao);

                }
            private DataTable Consultar(string Sql_Consulta)
            {
                SqlConnection conecao = new SqlConnection(conectar); minha string de conexao
                SqlCommand comandos = new SqlCommand(Sql_Consulta);            
                DataTable cliente = new DataTable();
                try
                {
                    comandos.CommandType = CommandType.Text;
                    comandos.CommandText = Sql_Consulta.ToString();
                    conecao.Open();
                    SqlDataAdapter adater = new SqlDataAdapter();
                    meu_filtro.DataSource = Consultar("Select * From tb_Manutencao"); mudei o DataSource pra cá e parou de dar o erro
                    adater.InsertCommand = comandos;
                    adater.Fill(cliente);
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message.ToString());
                }
                finally { conecao.Close(); }
                return cliente;            
            }

    private void teste_Click(object sender, EventArgs e)
            {            
                meu_filtro.Filter = "dataCadas = '" + this.dateTimePicker1.Value.Date + "'"; confirmando os requisitos neste caso eu nao deveria pedir para que atualizasse o datagridview1?

    terça-feira, 3 de abril de 2012 00:13
  • Cara cara cara voce usou wizard pra obeter o teu TableAdapter? tu estas a complicar tudo. tinhas de falar que usas-te wizard....


    One word frees us of all the weight and pain of life: that word is love.

    terça-feira, 3 de abril de 2012 21:56
    Moderador
  • Malange

    estou sendo chato, mas vou abusar da sua boa vontade.

    eu consegui fazer um filter. Vou colocar somente a parte que está funcionando, onde já consigo fazer dois filtros.

    de a sua opiniao sobre a minha ideia:

    private void button2_Click(object sender, EventArgs e)
            {
                int id = Convert.ToInt32(txtIdveiculo.Text);
                bs.Filter = "idVeiculo= " + id + "AND tipoManut like '%" + TipoManut.Text + "%'";

    o AND  é a coluna de mantençao e funciona bem no meu combobox. 

    é possivel eo colocar agora a coluna dataCadas na sequencia do codigo?

    algo desse tipo:

     bs.Filter = "idVeiculo= " + id + "AND tipoManut like '%" + TipoManut.Text + "%' AND datacadas<=..... aqui neste caso eu teria que colocar o dateTimerPicker;

    acho q serao necessarios dois no caso, para poder fazer o filtro da data X até a data Y.

    o que voce acha?

    quarta-feira, 4 de abril de 2012 00:04
  • Sim, acho k vai funcionar.


    One word frees us of all the weight and pain of life: that word is love.

    sábado, 7 de abril de 2012 18:20
    Moderador
  • ola Malange

    Veja Este codigo:

    bs.Filter = "idVeiculo =" + ID + "E tipoManut like '%" + TipoManut.Text + "%' AND dataCadas> = '" + dateTimePicker1.Text + "' AND dataCadas <= '" + + dateTimePicker2.Text " '";

    ja coloquei valor e nao mudou o Resultado.

    o Que Acontece o seguinte e.

    o Filtro Funciona somente SE eu filtras datas proximas Bem, OU SEJA, SE colocar 2012/03/03 cadastro não somente o Filtro Funciona si colocar o> no dia 3/1 comeu o DIA 3/03.

    oq PoDE Ser ISSO?

    tambem ja deixei elementos DESTA forma:

    bs.Filter = "idVeiculo =" + ID + "E tipoManut like '%" + TipoManut.Text + "%' AND (dataCadas> = '" + dateTimePicker1.Text + "') AND (dataCadas <= '" + dateTimePicker2 . Texto + "')";

    pelo  que entendi os dois filtros > e < precisam estar dentro do mesmo mes.

    a configuração da coluna que armazena a data no BD está com nvarchar.

    isto pode estár dando o bug?

    me da UMA luz ai!!




    domingo, 8 de abril de 2012 03:11
  • @Marcos7419

    A gente so esta aki pra dar uma luz. Cada situacao difere de pessoa a pessoa, eu pessoalmente nao faria como tu estas a fazer. Eu nao acredito em filtar quatro criterio ou condicoes.

    Tens de usar logica, tens de pensar um pouco fora da caixa.

    Eu faria assim:

    Eu quero trazer todos os registos que estao relacionados a uma determinada data em k foram gravadas na tabela. Eu simplesmente pesquizava pela data de registo. Evitava colocar tipo. Tu tens muitos tipomanut ai na teu filtro.

    Pensa da seguinte forma, se eu quizer saber as matriculas que foram registadas em determinada data eu nao coloca a pesquiza pelas matriculas mais sim pela data. Ai a pesquiza tra todas as matriculas que comecaram ou foram criadas nesta data.

    Se eu quizer saber todos os cidadao brazileiro que nasceu numa determinda data eu nao vou pesquizar pelos nomes mais sim pelas datas, ai vou ter todos os nomes que nasceram nesta data.

    Eu ja nao sei o k voce quer, comecaste com uma pergunta simples, agora esta complicado tudo.


    One word frees us of all the weight and pain of life: that word is love.

    domingo, 8 de abril de 2012 15:35
    Moderador
  • Ok Malange

    vou levar tudo em consideração.

    como sou iniciante entendo que as dicas e instruções de quem tem maior conhecimento são importantes para que se desenvolva um projeto com simplicidade e objetividade.

    também irei rever a forma que abordei as minhas duvidas no tópico do forun e que após ler tudo o que já conversamos , realmente deveria ter sido mais objetivo e claro.

    agradeço a sua atenção.

    para finalizar, informo que encontrei o erro e todos os filtros que eu tinha como objetivo implantar estão funcionando.

    obrigado

    segunda-feira, 9 de abril de 2012 12:53