none
Preenchendo datagrid no linq usando 2 tabelas RRS feed

  • Pergunta

  • Pessoal estou com uma grande dificuldade ao preencher um datagrid com ingormações em 2 tabelas ver imagem(http://admin.paulistasul.org.br/2.jpg), este datagrid tem que ser "ToList().AsQueryable()" pois ao clicar na linha no datagrid pego os valores e jogo em um grid que devolvo os valores para edição. Como na imagem(http://admin.paulistasul.org.br/1.jpg):

    Usei a seguinte query:

        public static IEnumerable<Campaign> ListByCampaign(SVCEntities cx)
        {
    
              return (from c in cx.Campaign
              join g in cx.GenericType on c.CampaignTypeID equals g.TypeID
              where g.TypeName.Equals("Campaign") 
              select c).ToList().AsQueryable();
    
        } 
    

    não consigo trazer a descriçãodo da campanha que está na tabela "GenericType" campo"Description":

    Temtei até fazer de uma forma simples no xaml:

    <DataGridTextColumn x:Name="campaignTypeIDColumn2" Binding="{Binding Path=GenericType.Description}" Header="Tipo2_" Width="70" />
    

     E não deu certo.

     

    Quando uso a seguinte query, consigo trazer o resultado, porem ao clicar na linha do datagrid ela não é mais editavel ou seja não consigo trazer o valores para o grid do form.

     public static IEnumerable<Campaign> ListCampaign(SVCEntities cx)
        {
          return (from c in cx.Campaign
              join g in cx.GenericType on c.CampaignTypeID equals g.TypeID
              where g.TypeName.Equals("Campaign")
              orderby c.Name
              select new
              {
                CampaignID = c.CampaignID,
                CampaignTypeID = c.CampaignTypeID,
                DescriptionCampaignType = g.Description,
                Leader = c.Leader,
                Name = c.Name,
                ViceLeader = c.ViceLeader,
                PriceTableID = c.PriceTableID,
              }).ToList()
              .Select(p => new Campaign()
              {
                CampaignID = p.CampaignID,
                CampaignTypeID = p.CampaignTypeID,
                DescriptionCampaignType = p.DescriptionCampaignType,
                Leader = p.Leader,
                Name = p.Name,
                ViceLeader = p.ViceLeader,
                PriceTableID = p.PriceTableID,
              });
        }
         
    

    Alguém tem alguma solução ou um dica pro meu problema?

    at.

     

     


    Moizés Cerqueira | MCP
    Site: www.moizes.cerqueira.nom.br
    Twitter: @moicer
    quarta-feira, 9 de março de 2011 14:37

Todas as Respostas

  • Amigo, temos duas possiveis soluções pra isto. Possivelmente seu modelo está como Lazy Loading,  oque quer dizer que entidades relacionadas so serão carregadas sob demanda. Recomendo que você inclua na sua consulta o método include que informa para carregar a entidade relacionada junto com a entidade principal em tempo de consulta(Eager load), por exemplo:

     public static IEnumerable<Campaign> ListByCampaign(SVCEntities cx)
      {
    
         return (from c in cx.Campaign.Include("GenericType")
         join g in cx.GenericType on c.CampaignTypeID equals g.TypeID
         where g.TypeName.Equals("Campaign") 
         select c).ToList().AsQueryable();
    
      } 
    

     


    Olavo Oliveira Neto
    http://olavooneto.wordpress.com
    Se for útil marque como resposta e faça um Developer feliz :)
    sexta-feira, 11 de março de 2011 12:43
    Moderador
  • Olavo, não obtive sucesso, não sei mais o que tentar, teoricamente parece ser simples no Binding do campo no datagrid passo nome tabela.campo e nada, tem alguma outra coisa que possa me ajudar?

     

     

     

    <DataGrid AutoGenerateColumns="False" EnableRowVirtualization="True" ItemsSource="{Binding}" Name="campaignDataGrid" RowDetailsVisibilityMode="VisibleWhenSelected" Grid.Row="4" Grid.Column="1" IsReadOnly="True" SelectionChanged="campaignDataGrid_SelectionChanged">

     

     

     

    <DataGrid.Columns>

     

     

     

    <DataGridTextColumn x:Name="campaignIDColumn" Binding="{Binding Path=CampaignID}" Header="Código" Width="Auto" />

     

     

     

    <DataGridTextColumn x:Name="nameColumn" Binding="{Binding Path=Name}" Header="Nome Campanha" Width="250" />

     

     

     

    <DataGridTextColumn x:Name="Type" Binding="{Binding Path=GenericType.Description}" Header="Tipo" Width="auto"/>

     

     

     

    <DataGridTextColumn x:Name="leaderColumn" Binding="{Binding Path=Leader}" Header="Lider" Width="200" />

     

     

     

    <DataGridTextColumn x:Name="viceLeaderColumn" Binding="{Binding Path=ViceLeader}" Header="Vice-Lider" Width="200" />

     

     

     

    </DataGrid.Columns>


    Moizés Cerqueira | MCP
    Site: www.moizes.cerqueira.nom.br
    Twitter: @moicer
    quinta-feira, 17 de março de 2011 13:16