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í:
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

Pjava

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.

<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.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar