none
Filtrar dados de um bindingsource populado por uma consulta LINQ e carregar a DataGridView RRS feed

  • Pergunta

  • Boa Tarde senhores, 

     

    é minha primeira vez aqui, portanto desculpem qualquer coisa.

    meu problema é o seguinte, preciso filtra dados de um datagridview baseado em uma textbox e 2 combobox, 

    o datagrid é populado por um bindingsource, e esse e populado por uma consulta linq.

    até ai belza o datagrid mostra os dados, porem quando mando filtrar ele continua mostrando a mesma coisa, o filtro nao faz efeito.

    estive olhando algumas coisa o modo de execucao e percebi que o bindingsource esta populado tipo LIST, os dados nao aparecem em ITEM quando faço um breakingpoint, pode ser esse o problema??

    vou postar o codigo para voces analizarem.


     Private db As New OpsislinqDataContext
      Dim bs As New BindingSource
    
    
      Private Sub frmconsulta_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    'faço a consulta linq   
     Dim SS = From Sols In db.tbsses _
                        Select Sols.cdun, Sols.cdss, Sols.dtexecucao, Sols.nmendereco, Sols.tbequipe.nmequipe, Sols.tbcidade.nmcidade
    
    'atribuo o resultado da pesquisa ao bindingsource    
        Me.bs.DataSource = SS
    
    'atribuo o bindingsource ao datagrid
        Me.dgconsulta.DataSource = Me.bs
    
    'carrego as combobox e deixo sem selecionar nada (dataset normal)
        TbcidadeBindingSource.DataSource = db.tbcidades
        TbequipeBindingSource1.DataSource = db.tbequipes
        TbequipeComboBox.SelectedItem = Nothing
        TbcidadeComboBox.SelectedItem = Nothing
    
    'executo o filtro no endereco para filtrar todas as ruas teste
        Me.bs.Filter = "nmendereco like '%rua teste%'"
    
    'atribuo o resultado ao datagrid novamente
        Me.dgconsulta.DataSource = bs
    

    só que nao filtra nada, fica td como está, pode ser por causa do tipo list??? como resolvo isso?

     

     

    obrigado desde já

     

    quarta-feira, 16 de março de 2011 20:53

Respostas

  • obrigado a quem tentou ajudar mas acabei resolvendo de outra forma, filtrando direto na consulta com likes em todos os campos, segue exemplo:

     

     

     
    
     If txtue.Text = Nothing Then
       ue = "*"
      Else
       ue = txtue.Text
      End If
      If txtnumeross.Text = Nothing Then
       numss = "*"
      Else
       numss = txtnumeross.Text
      End If
      If txtrua.Text = Nothing Then
       endereco = "*"
      Else
       endereco = "*" & txtrua.Text + "*"
    
      End If
    
      
       Dim SS = From Sols In db.tbsses.AsEnumerable() _
              Where Sols.nmendereco Like endereco And Sols.cdun Like ue And Sols.cdss Like numss _
              Select Sols.cdun, Sols.cdss, Sols.dtexecucao, Sols.nmendereco, Sols.tbequipe.nmequipe, Sols.tbcidade.nmcidade
      
    
      Me.dt.DataSource = SS
    
      Me.dgconsulta.DataSource = Me.dt
    
      
      Me.dgconsulta.DataSource = dt
    
    
    

     

     

    t+


    Clayton Luiz
    • Marcado como Resposta tecnico.clayton sexta-feira, 25 de março de 2011 06:35
    sexta-feira, 25 de março de 2011 06:35

Todas as Respostas

  • ou faz assim:

     bin.Filter = "nmenderec Like '*" + textBox1.Text + "'*"


    Just Be Humble Malange!
    quarta-feira, 16 de março de 2011 23:06
    Moderador
  • sim malange estava mais ou menos assim, só q com %

    coloquei o texto direto no codigo pra fazer testes mas continua o problema

    continua nao filtrando, vc acha q pode ser pq os dados no bs estao como COLECTION??

     

    obrigado


    Clayton Luiz
    quarta-feira, 16 de março de 2011 23:19
  • sim malange estava mais ou menos assim, só q com %

    coloquei o texto direto no codigo pra fazer testes mas continua o problema

    continua nao filtrando, vc acha q pode ser pq os dados no bs estao como COLECTION??

     

    obrigado


    Clayton Luiz

    Voce tem duas tabelas no teu bindingsource?

    ou apenas uma tabela?

    Fizeste um joint?

     


    Just Be Humble Malange!
    quarta-feira, 16 de março de 2011 23:23
    Moderador
  • o bindingsource tem o resultado da consulta em linq

    a consulta retorna os dados " Select Sols.cdun, Sols.cdss, Sols.dtexecucao, Sols.nmendereco, Sols.tbequipe.nmequipe, Sols.tbcidade.nmcidade"

    como uma colecao.

     

    Como seria o Joint???

     

     


    Clayton Luiz
    quarta-feira, 16 de março de 2011 23:36
  • Olá Clayton!

    Utilize este artigo como exemplo para construir o seu linq.

    http://weblogs.asp.net/jgaylord/archive/2008/05/21/using-quot-like-quot-in-linq-to-sql.aspx

    Dados em um Collection também funcionam com o Linq.

    http://www.dotnetscraps.com/dotnetscraps/post/LINQ-Performance-Part-1-LINQ-to-Collection.aspx

    att;


    Eder Costa
    LATAM Forum Support Engineer
    Microsoft Corporation
    forumguys
    segunda-feira, 21 de março de 2011 16:36
    Moderador
  • obrigado a quem tentou ajudar mas acabei resolvendo de outra forma, filtrando direto na consulta com likes em todos os campos, segue exemplo:

     

     

     
    
     If txtue.Text = Nothing Then
       ue = "*"
      Else
       ue = txtue.Text
      End If
      If txtnumeross.Text = Nothing Then
       numss = "*"
      Else
       numss = txtnumeross.Text
      End If
      If txtrua.Text = Nothing Then
       endereco = "*"
      Else
       endereco = "*" & txtrua.Text + "*"
    
      End If
    
      
       Dim SS = From Sols In db.tbsses.AsEnumerable() _
              Where Sols.nmendereco Like endereco And Sols.cdun Like ue And Sols.cdss Like numss _
              Select Sols.cdun, Sols.cdss, Sols.dtexecucao, Sols.nmendereco, Sols.tbequipe.nmequipe, Sols.tbcidade.nmcidade
      
    
      Me.dt.DataSource = SS
    
      Me.dgconsulta.DataSource = Me.dt
    
      
      Me.dgconsulta.DataSource = dt
    
    
    

     

     

    t+


    Clayton Luiz
    • Marcado como Resposta tecnico.clayton sexta-feira, 25 de março de 2011 06:35
    sexta-feira, 25 de março de 2011 06:35