Foreach não está montando corretamente a árvore de dependências
16/09/2014
0
Preciso fazer o seguinte: Tenho na minha LINQ, Motivos, Unidade_Negocio, Familia e Produto(Descricao). O que preciso. Quando entrar o primeiro motivo, deveria listar em forma de árvores(isso já faz) as UN. Logo, terei, várias UN para cada Motivo. Dentro das UN eu teria várias Familias para cada UN. E por fim, para cada Familia, vários produtos. Um típico relacionamento 1 => N. Bem, tive muita dificuldade em montar primeiro a estrutura, que já foi resolvido. Acontece que eu tenho, da forma que foi feito, apenas 1 => 1. Creio que a minha LINQ não está correta, falta agregar os devidos ID's, para saber que esses pertence à aquele e assim por diante. É exatamente aí que eu estou apanhando. Veja abaixo minha Action(LINQ) e minha View. Acho também que minha View pode estar errada, sei lá, mas vejam aí:
E essa é minha View(Apenas o foreach)
public ActionResult Acao() { RupturaEntities db = new RupturaEntities(); var monta_arvore = db.Ruptura.Where(m => m.IDMotivo != 6) .Select(rup=> new MontaArvoreAcao{ IDRuptura = rup.IDRuptura, DataRuptura = rup.DataRuptura, IDMotivo = rup.IDMotivo, Motivo = rup.Motivo.Motivo1, IDOrigem = rup.IDOrigem, CodigoPDV = rup.CodigoPDV, UF = rup.PDV.UF, Cidade = rup.PDV.Cidade, CnpjDescricao= rup.PDV.Cnpj + " - " + rup.PDV.Descricao, Codigo_Apresentacao = rup.Codigo_Apresentacao, Unidade_Negocio = rup.Apresentacao.Unidade_Negocio, Franquia = rup.Apresentacao.Franquia, Familia = rup.Apresentacao.Familia, Descricao = rup.Apresentacao.Descricao }).ToList().Take(50); return View(monta_arvore.ToList()); }
E essa é minha View(Apenas o foreach)
<div id='jqxWidget'> <div style='float: left; width:auto;'> <div id='jqxTree' style='visibility: hidden; float: left; margin-left: 20px;'> <ul> @foreach (var item in Model) { <li item-checked='false' item-expanded='false'> @item.Motivo <ul> <li item-checked='false' item-expanded='false'> @item.Unidade_Negocio <ul> <li item-checked='false' item-expanded='false'> @item.Familia <ul> <li item-checked='false' item-expanded='false'> @item.Descricao </li> </ul> </li> </ul> </li> </ul> </li> } </ul> </div> <div style='margin-left: 60px; float: left;'> <div style='margin-top: 10px;'> <input id='jqxCheckBox' type="hidden"> </div> </div> </div> </div>
Pjava
Curtir tópico
+ 0
Responder
Posts
17/09/2014
Pjava
Pessoal, coloquei o group by na LINQ e não funcionou. Dá erro. Tentei fazer na view e tem esse o problema de que não reconhecer alguns campos. Alem do mais fiz uns IF's para controlar e acontece o seguinte. O primeiro IF que é sobre o Motivo, funciona, ou seja, não permite a repetição do Motivo. Já os demais não funcionam e são printados na tela. Veja como ficou minha View com esses IF's.
Com GroupBy dá o seguinte arro:
<div id='jqxWidget'> <div style='float: left; width:auto;'> <div id='jqxTree' style=' float: left; margin-'> @{ var _motivo = ""; var _un = ""; var _familia = ""; <ul> @foreach (var item in Model) { if (_motivo != item.Motivo) { <li item-checked='false' item-expanded='false'> @item.Motivo <ul> if (_un != item.Unidade_Negocio) { @foreach(var un in @item.Unidade_Negocio) { <li item-checked='false' item-expanded='false'> @item.Unidade_Negocio <ul> @foreach(var fam in @item.Familia) { <li item-checked='false' item-expanded='false'> @item.Familia <ul> <li item-checked='false' item-expanded='false'> @item.Descricao <ul> <li item-checked='false' item-expanded='false'> @item.CnpjDescricao </li> </ul> </li> </ul> </li> } </ul> </li>@*Unidade Negocio*@ } } </ul> </li> } _motivo = @item.Motivo; _un = @item.Unidade_Negocio; _familia = @item.Familia; } </ul> } </div>
Com GroupBy dá o seguinte arro:
An exception of type 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' occurred in System.Core.dll but was not handled in user code Additional information: 'object' não contém uma definição para 'Motivo'. Teria que colocar todos os campos da LINQ no agrupamento
Responder
17/09/2014
Pjava
Deixa eu explicar.Na LINQ está tudo carregado, conforme modelo postado aqui.
Agora, quando eu carrego na View, é aí que acontece algumas coisas. Se eu coloco um GroupBy na LINQ, conforme exemplo postado, dá erro logo no primeiro registro, que no caso é o Motivo, mas poderia ser qualquer outro. Erro já postado aqui. A query me traz muita coisa repetida, tipo, Motivo, UN e etc... Aí declarei uma variável e dentro do foreach, ela será setada com o valor que ela estiver controlando, tipo: Vamos dizer Motivo. Ela está com valor vazio. Aí eu coloco um IF para saber se o valor da Variavel é diferente do Motivo. Caso seja(a primeira sempre é) e então carrego o Motivo. Se na próxima iteração, ela continuar igual, aí pula não repetindo o mesmo nome. Bem, como Motivo é o primeiro campo, isso está funcionando bem. Quando chego no UN, aí já não funciona. Porem, escrevendo esse post, acho que coloquei a var em lugar errado, ou seja, deveria estar no final do foreach da UN e não no foreach do Motivo, como está. Mas vou testar, mas de qualquer forma, não está funcionando os demais IF's. O primeiro funciona, mas os demais não. Isso é que está atrapalhando. Estou pesquisando na net, mas ainda não vi nada realmente que resolva meu problema com IF's aninhados dentro de uma View(CSHTML). Essa é minha dor de cabeça.
Agora, quando eu carrego na View, é aí que acontece algumas coisas. Se eu coloco um GroupBy na LINQ, conforme exemplo postado, dá erro logo no primeiro registro, que no caso é o Motivo, mas poderia ser qualquer outro. Erro já postado aqui. A query me traz muita coisa repetida, tipo, Motivo, UN e etc... Aí declarei uma variável e dentro do foreach, ela será setada com o valor que ela estiver controlando, tipo: Vamos dizer Motivo. Ela está com valor vazio. Aí eu coloco um IF para saber se o valor da Variavel é diferente do Motivo. Caso seja(a primeira sempre é) e então carrego o Motivo. Se na próxima iteração, ela continuar igual, aí pula não repetindo o mesmo nome. Bem, como Motivo é o primeiro campo, isso está funcionando bem. Quando chego no UN, aí já não funciona. Porem, escrevendo esse post, acho que coloquei a var em lugar errado, ou seja, deveria estar no final do foreach da UN e não no foreach do Motivo, como está. Mas vou testar, mas de qualquer forma, não está funcionando os demais IF's. O primeiro funciona, mas os demais não. Isso é que está atrapalhando. Estou pesquisando na net, mas ainda não vi nada realmente que resolva meu problema com IF's aninhados dentro de uma View(CSHTML). Essa é minha dor de cabeça.
Responder
Clique aqui para fazer login e interagir na Comunidade :)