none
Pesquisar por intervalos datas datagridview RRS feed

  • Pergunta

  • Boa tarde,

    Preciso fazer uma pesquisar em uma coluna de datagridview que tem datas, tenho dois datetimepicker para data inicial e final, e um botão para pesquisar. O grid é carregado por um datatable, não tenho pesquisa em tabelas de db. Olhei algo a respeito, mas não estou conseguindo montar, vi que da para fazer com dataview e datatable, mas não consegui acertar o código, se alguém puder me ajudar...Agradeço!

    quarta-feira, 27 de outubro de 2010 18:20

Respostas

  • Isso, se você for usar a aplicação na cultura em português você pode converter colocando dtbData.Value.ToString("dd/MM/yyyy")
    Bruno Ferreira de Souza
    Analista Desenvolvedor .NET
    MCP - Windows Form
    quinta-feira, 28 de outubro de 2010 20:26
  • Se você quiser filtrar entre as datas inicio e fim, no comando seria a data final primeiro e depois a inicial ficando assim:

    dtrs = CType(DataGridView1.DataSource, DataTable).Select("Data <= '" & dtpfim .Value.ToString("dd/MM/yyyy") & "' AND Data >= '" & dtpinicio .Value.ToString("dd/MM/yyyy") & "'")

    Essa Parte " .Select("Data <= " o nome Data seria o nome da sua coluna de data do Datatable


    Bruno Ferreira de Souza
    Analista Desenvolvedor .NET
    MCP - Windows Form
    • Marcado como Resposta novato 2010 quinta-feira, 28 de outubro de 2010 21:48
    quinta-feira, 28 de outubro de 2010 21:24
  • Aqui vai algumas dicas:

     

    DataGridView1.DataSource = dv

            dv.RowFilter = "FirstName LIKE '%" & TextBox1.Text & "%'"

            dv.Sort = "FirstName"

            DataGridView1.DataSource = dv

     

    2 passo:

     Dim customerRow() As Data.DataRow

                customerRow = dataset.Tables("Table_Copy").Select("FirstName LIKE '%" & TextBox1.Text & "'")

     


    Just Be Humble Malange!
    quarta-feira, 27 de outubro de 2010 19:34
    Moderador
  • boas, se nao usas um dataset ou bindingsource ou a dataview a coisa fica complicada.

    sem alterar mt o que tens, sugiro que uses um dataview assim:

     

    carregar a grid:

    Dim dt As New DataTable
    Dim dv As New DataView(dt)

    DataGridView1.DataSource = dv

     

    filtrar na dataview:

     dv.RowFilter = "FirstName LIKE '%" & TextBox1.Text & "'"


    espero ter ajudado.
    quarta-feira, 27 de outubro de 2010 21:12
  • Faz assim:

        Dim dtrs As DataRow()
        dtrs = CType(dgvDatas.DataSource, DataTable).Select("Data < '" & DateTimePicker3.Value & "' AND Data >= '" & DateTimePicker2.Value & "'")

    Dessa forma você consegue filtrar no datatable enter os intervalos onde a Data é o nome da sua coluna de data no datatable.


    Bruno Ferreira de Souza
    Analista Desenvolvedor .NET
    MCP - Windows Form
    quarta-feira, 27 de outubro de 2010 23:40

Todas as Respostas

  • Aqui vai algumas dicas:

     

    DataGridView1.DataSource = dv

            dv.RowFilter = "FirstName LIKE '%" & TextBox1.Text & "%'"

            dv.Sort = "FirstName"

            DataGridView1.DataSource = dv

     

    2 passo:

     Dim customerRow() As Data.DataRow

                customerRow = dataset.Tables("Table_Copy").Select("FirstName LIKE '%" & TextBox1.Text & "'")

     


    Just Be Humble Malange!
    quarta-feira, 27 de outubro de 2010 19:34
    Moderador
  • Obrigado pelo help! Mas não tenho dataset no projeto, é só datatable que carrega a grid e um botão e dois datetimepickers... Sei que tem usar o dataview para fazer o filtro..valeu!
    quarta-feira, 27 de outubro de 2010 20:55
  • boas, se nao usas um dataset ou bindingsource ou a dataview a coisa fica complicada.

    sem alterar mt o que tens, sugiro que uses um dataview assim:

     

    carregar a grid:

    Dim dt As New DataTable
    Dim dv As New DataView(dt)

    DataGridView1.DataSource = dv

     

    filtrar na dataview:

     dv.RowFilter = "FirstName LIKE '%" & TextBox1.Text & "'"


    espero ter ajudado.
    quarta-feira, 27 de outubro de 2010 21:12
  • Pois é, já coloquei um dataview...mas como monto do rowfilter para receber o conteudo dos datetimepicker? São dois, datainicial e datafinal...ou seja, é um invervalo de datas.... Por exemplo: Escolho uma data no datetimepicker1 para datainicial ou no datetimepicker2 para datafinal....
    quarta-feira, 27 de outubro de 2010 22:43
  • Faz assim:

        Dim dtrs As DataRow()
        dtrs = CType(dgvDatas.DataSource, DataTable).Select("Data < '" & DateTimePicker3.Value & "' AND Data >= '" & DateTimePicker2.Value & "'")

    Dessa forma você consegue filtrar no datatable enter os intervalos onde a Data é o nome da sua coluna de data no datatable.


    Bruno Ferreira de Souza
    Analista Desenvolvedor .NET
    MCP - Windows Form
    quarta-feira, 27 de outubro de 2010 23:40
  • Pois é, já coloquei um dataview...mas como monto do rowfilter para receber o conteudo dos datetimepicker? São dois, datainicial e datafinal...ou seja, é um invervalo de datas.... Por exemplo: Escolho uma data no datetimepicker1 para datainicial ou no datetimepicker2 para datafinal....

    O datatable faz o mesmo era so trocar. Veja o exemplo do Bruno ele usa Datatable. Nao existe segredo nenhum.

     


    Just Be Humble Malange!
    quinta-feira, 28 de outubro de 2010 11:45
    Moderador
  • Eu conheço um jeito(gambiarra) que refina o próprio DataGridVeiw

    De uma olhada:

    Dim Celula As DateTime
    For i As Integer = 0 To DataGridView1.RowCount - 1
        If i < DataGridView1.RowCount - 1 Then
           Celula = Convert.ToDateTime(DataGridView1.Rows(i).Cells(0).Value.ToString())
           If Celula.Subtract(DataTimePickerInicio.Value.Date).TotalDays < 0 _
           Or Celula.Subtract(DataTimePickerFim.Value.Date).TotalDays > 0 Then
             DataGridView1.Rows.RemoveAt(i)
             i += -1
           End If
        End If
    Next
    

    Nesse caso ela não filtra no DataTable nem DataView(como dito antes). Ele apenas faz uma busca pelas células e remove as que estão fora do intervalo.

    Não sei se acaba sendo viavel no seu caso...mas fica ai a dica

     


     

    Att. Osni

    quinta-feira, 28 de outubro de 2010 16:12
  • Olá Bruno... Testei o código... No datetimepicker.valeu os valores ficam invertidos...por exemplo, dentro do datetimepicker fica o valor que coloquei, mas no .value ele inverte o dia pelo mês..exemplo se coloco 13/10/2010, no value fica 10/13/2010 aí acaba não filtrando certo...teria que converter, certo?
    quinta-feira, 28 de outubro de 2010 19:51
  • Isso, se você for usar a aplicação na cultura em português você pode converter colocando dtbData.Value.ToString("dd/MM/yyyy")
    Bruno Ferreira de Souza
    Analista Desenvolvedor .NET
    MCP - Windows Form
    quinta-feira, 28 de outubro de 2010 20:26
  • Ficaria assim: dtrs = CType(DataGridView1.DataSource, DataTable).Select("Data <= '" & dtpinicio.Value.ToString("dd/MM/yyyy") & "' AND Data >= '" & dtpfim.Value.ToString("dd/MM/yyyy") & "'")
    quinta-feira, 28 de outubro de 2010 21:20
  • Se você quiser filtrar entre as datas inicio e fim, no comando seria a data final primeiro e depois a inicial ficando assim:

    dtrs = CType(DataGridView1.DataSource, DataTable).Select("Data <= '" & dtpfim .Value.ToString("dd/MM/yyyy") & "' AND Data >= '" & dtpinicio .Value.ToString("dd/MM/yyyy") & "'")

    Essa Parte " .Select("Data <= " o nome Data seria o nome da sua coluna de data do Datatable


    Bruno Ferreira de Souza
    Analista Desenvolvedor .NET
    MCP - Windows Form
    • Marcado como Resposta novato 2010 quinta-feira, 28 de outubro de 2010 21:48
    quinta-feira, 28 de outubro de 2010 21:24
  • Valeu Bruno, vc é o cara! Funcionou, era isso mesmo que eu precisava... Muito obrigado!
    quinta-feira, 28 de outubro de 2010 21:47