Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

rtavix

[Resolvido] Pegar o indice de uma linha

Recommended Posts

Como faço para pegar o indice de uma linha de uma planilha excel para exibir em um log?

 

tentei dessa forma mas não funcionou o contador.

 private Interessado setInteressado(DataRow linha)
        {
            int i = 0;
            i = i + 1;
   
    if (!linha.ItemArray[7].ToString().Equals(""))
                if (linha.ItemArray[7].ToString().Length == 14)
                {
                    interessado.CPF_CNPJ = AuxiliarCPF_CNPJ.DesformataCPF(linha.ItemArray[7].ToString());
                    interessado.Tipo = 1;
                }
                else if (linha.ItemArray[7].ToString().Length == 18)
                {
                    interessado.CPF_CNPJ = AuxiliarCPF_CNPJ.DesformataCNPJ(linha.ItemArray[7].ToString());
                    interessado.Tipo = 2;
                }
                else
                {
                    log.Append("O CPF/CNPJ informado na célula H referente a linha " + i.ToString() + " está em um formato incorreto. Favor corrigir a planilha. <br>");
                    arquivoInvalidado = true;
                }
}

Alguém pode me ajudar por gentileza?

Compartilhar este post


Link para o post
Compartilhar em outros sites
1 hora atrás, quintelab disse:

Você não vai conseguir dessa forma. Você esta passando o DataRow pro seu método, você precisa pegar o indice antes disso. Eu lembro de ter respondido a mesma dúvida em outro tópico.

Sim, mas no outro tópico era uma outra situação amigo, eu até fui lá dá uma olhada. voce poderia por gentileza me ajudar :/

Compartilhar este post


Link para o post
Compartilhar em outros sites
1 hora atrás, quintelab disse:

Você não vai conseguir dessa forma. Você esta passando o DataRow pro seu método, você precisa pegar o indice antes disso. Eu lembro de ter respondido a mesma dúvida em outro tópico.

Quintelab ele não mostra da linha 6 a diante, eu queria pegar o indice da linha 6 a diante, porque da linha 1 a 5 é cabeçalho.

daí apliquei a sua solução para aquele outro log e a mensagem que mostra é que A célula da linha 1 deve ser preenchida, porém deveria mostrar que a Celula da linha 6 deve ser preenchida, isso para as demais. Me ajuda por favor amigo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu to te ajudando tem várias semanas...

Até onde eu sei é impossível você pegar o indice da linha do jeito que fez, você vai ter que passar o indice pro método:

 

private Interessado setInteressado(DataRow linha, int i)
{   
    if (!linha.ItemArray[7].ToString().Equals(""))
    {
        if (linha.ItemArray[7].ToString().Length == 14)
        {
            interessado.CPF_CNPJ = AuxiliarCPF_CNPJ.DesformataCPF(linha.ItemArray[7].ToString());
            interessado.Tipo = 1;
        }
        else if (linha.ItemArray[7].ToString().Length == 18)
        {
            interessado.CPF_CNPJ = AuxiliarCPF_CNPJ.DesformataCNPJ(linha.ItemArray[7].ToString());
            interessado.Tipo = 2;
        }
        else
        {
            log.Append("O CPF/CNPJ informado na célula H referente a linha " + i.ToString() + " está em um formato incorreto. Favor corrigir a planilha. <br>");
            arquivoInvalidado = true;
        }
    }
}


Só que claro, onde você chama esse método você vai ter que passar o valor de i.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu fiz uma alteração usando o dataset ds, que sei que vai resolver o meu problema, porém está dando erros. Após a alteração:

 

 private Interessado setInteressado(DataSet ds, int linha)
 {
   
    if (!ds.Tables[0].Rows[linha].ItemArray[7].ToString().Equals(""))
                if (ds.Tables[0].Rows[linha].ItemArray[7].ToString().Length == 14)
                {
                    interessado.CPF_CNPJ = AuxiliarCPF_CNPJ.DesformataCPF(ds.Tables[0].Rows[linha].ItemArray[7].ToString());
                    interessado.Tipo = 1;
                }
                else if (ds.Tables[0].Rows[linha].ItemArray[7].ToString().Length == 18)
                {
                    interessado.CPF_CNPJ = AuxiliarCPF_CNPJ.DesformataCNPJ(ds.Tables[0].Rows[linha].ItemArray[7].ToString());
                    interessado.Tipo = 2;
                }
                else
                {
                    log.Append("O CPF/CNPJ informado na célula H" + (linha + 1) + " está em um formato incorreto. Favor corrigir a planilha. <br>");
                    arquivoInvalidado = true;
                }
 }
   

porém está dando erro aqui:

setProcInter(processo, interessado, ds, i);

 

Erro 25.jpg

Compartilhar este post


Link para o post
Compartilhar em outros sites

E em verificação Preliminar eu mudei para:

 private void VerificacaoPreliminar(int count, DataSet ds)
        {

Porém dá erro na linha que faço o relacionamento:

  VerificacaoPreliminar(registrosValidos);

Os registros validos estou usando para isso:

var registrosValidos = ((DataTable)Dados).Rows.OfType<DataRow>().Skip(5);
                        //Elimina a última linha
                        registrosValidos = registrosValidos.Take(registrosValidos.Count() - 1);
                        //ler de 100 em 100 regisros
                        int quantidade_por_pagina = 100;
                        int total_de_paginas;
                        //Conta os registros válidos
                        int qtd_total_registros = registrosValidos.Count();
                        //Realiza o calculo matemáticos para total de paginas.
                        total_de_paginas = (int)Math.Ceiling((double)qtd_total_registros / quantidade_por_pagina);
                        if (registrosValidos.Count() > 0)
                        {

E o código anterior antes de sofrer alteração, era dessa forma:

 //Inicio da validação dos dados inseridos na planilha
                                int numLinhas = ds.Tables[0].Rows.Count;
                                //Validação básica necessária para importação. PS: NumLinhas-1 porque o arquivo tem a última linha com total, que é inútil à importação.
                                VerificacaoPreliminar((numLinhas - 1), ds);

Pra você ter uma ideia que fiz no código, olhando assim, eu posso fazer o que para manter a estrutura?

 

Mesmo passando o valor de i ela não pega da linha 6 a diante :/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja só, você está fazendo uma confusão e nos apresentando erros em códigos que não são apresentados aqui. Como por exemplo o seguinte código:

setProcInter(processo, interessado, ds, i);

O erro é bem claro:

Citar

The name 'ds' does not exist in the corrent context

A variável não existe no contexto.

 

Outros detalhes, aqui você mudou a assinatura do método:

private void VerificacaoPreliminar(int count, DataSet ds)

E aqui está chamando ele com outros parâmetros:

VerificacaoPreliminar(registrosValidos);

Obviamente irá ocorrer um erro. Além do mais, a variável registrosValidos é um objeto do tipo DataTable e, na assinatura, você está requisitando um DataSet. São tipos diferentes.

 

Reveja no código as considerações já feita e, caso não chegue no resultado desejado, poste aqui os códigos aonde ocorrem os erros.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então Gabriel, cara eu estou tentando ler a linha 6 a diante da minha planilha, mas não sei por qual motivo ela não está lendo, resolvi fazer dessa forma em busca de pegar o indece, mas não funcionou. em cima disso, você no caso teria alguma outra ideia?

for (int j = 0; j < total_de_paginas; j++)
{
    var pagina = j;
    //leio as 100 linhas
    var linhasPorPagina = registrosValidos.Skip(pagina * quantidade_por_pagina).Take(quantidade_por_pagina);

    //Quebrando em 10 threads, vou quebrar a lista com a extenção criada abaixo
    var data_rows_divididos = linhasPorPagina.SplitList(10);
    int i = 1;
    foreach (var linhasDivididas in data_rows_divididos)
    {
        i++;
        //ADICIONO A MINHA LISTA DE TAREFAS PARALELAS
        TarefasParalelas.Add(ProcessamentoTabela(linhasDivididas, ds, usuarioLogado, (j * 100) + i + 5)); //j=pagina, i = linha e 5 é pra ignorar o cabeçalho
    }

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 04/05/2018 at 07:57, quintelab disse:

Eu to te ajudando tem várias semanas...

Até onde eu sei é impossível você pegar o indice da linha do jeito que fez, você vai ter que passar o indice pro método:

 


private Interessado setInteressado(DataRow linha, int i)
{   
    if (!linha.ItemArray[7].ToString().Equals(""))
    {
        if (linha.ItemArray[7].ToString().Length == 14)
        {
            interessado.CPF_CNPJ = AuxiliarCPF_CNPJ.DesformataCPF(linha.ItemArray[7].ToString());
            interessado.Tipo = 1;
        }
        else if (linha.ItemArray[7].ToString().Length == 18)
        {
            interessado.CPF_CNPJ = AuxiliarCPF_CNPJ.DesformataCNPJ(linha.ItemArray[7].ToString());
            interessado.Tipo = 2;
        }
        else
        {
            log.Append("O CPF/CNPJ informado na célula H referente a linha " + i.ToString() + " está em um formato incorreto. Favor corrigir a planilha. <br>");
            arquivoInvalidado = true;
        }
    }
}


Só que claro, onde você chama esse método você vai ter que passar o valor de i.

 

 

Quintelab consegui resolver essa parte do código ai de cima, porém, estou com dificuldade de pegar o indice da planilha e mostrar para o usuário nessa parte:

private System.Threading.Tasks.Task ProcessamentoTabela(IEnumerable<DataRow> dadosparam, DataSet ds, Usuario usuarioLogado, Int32 row)
        {
            
           Action<object> processamento = (dados) =>
            {
         
  				if (processo != null)
                            {
                                //se o processo não for nulo busco todos procinter relacionados a ele
                                List<ProcessoInteressado> listaprocinter = aplProcessoInteressado.consultarPorIdProcesso(processo.Codigo);
                                if (listaprocinter.Exists(o => o.Interessado == interessado))
                                    //String.Concat(row.ToString());
                                    log.Append("O interessado  " + processo.Interessado.Nome + ", informado na linha " + String.Concat(row.ToString()) + " foi adicionado novamente ao processo " + processo.NumProcessoJudicial + " <br>");
                                //log.Append("O interessado " + processo.Interessado.Nome + " foi adicionado novamente ao processo " + processo.NumProcessoJudicial + " <br>");
                                // log.Append("O interessado " + processo.Interessado.Nome + " foi adicionado novamente ao processo " + processo.NumProcessoJudicial + " <br>");
                                setProcInter(processo, interessado, ds, row);
                            }

                            else
                            {
                                //Novo Processo - 6.3
                                processo = new Processo();
                                processo.Interessado = interessado;
                            }
           }
}

tentei criar um contador, porém está pegando o indice errado, tipo, estou precisando pegar o indice da linha 6 a diante. Sacou?? Poderia por gentileza me dá uma moral ae brother?

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 04/05/2018 at 07:57, quintelab disse:

Eu to te ajudando tem várias semanas...

Até onde eu sei é impossível você pegar o indice da linha do jeito que fez, você vai ter que passar o indice pro método:

 


private Interessado setInteressado(DataRow linha, int i)
{   
    if (!linha.ItemArray[7].ToString().Equals(""))
    {
        if (linha.ItemArray[7].ToString().Length == 14)
        {
            interessado.CPF_CNPJ = AuxiliarCPF_CNPJ.DesformataCPF(linha.ItemArray[7].ToString());
            interessado.Tipo = 1;
        }
        else if (linha.ItemArray[7].ToString().Length == 18)
        {
            interessado.CPF_CNPJ = AuxiliarCPF_CNPJ.DesformataCNPJ(linha.ItemArray[7].ToString());
            interessado.Tipo = 2;
        }
        else
        {
            log.Append("O CPF/CNPJ informado na célula H referente a linha " + i.ToString() + " está em um formato incorreto. Favor corrigir a planilha. <br>");
            arquivoInvalidado = true;
        }
    }
}


Só que claro, onde você chama esse método você vai ter que passar o valor de i.

Quintelab, brother anteriormente eu usava um for para pegar o indice da linha, no caso seria esse for e funcionava:

 

for (int i = 5; i < (numLinhas - 1); i++)
                    {
                              }

Devidas as mudanças que foi necessário fazer, tive que utilizar um foreach, pois como estou trabalhando com dataRow, linha, por isso houve essa mudança, eu só estou precisando fazer com que dentro do meu foreach pegue da linha 6 a diante pois de 1 a 5 é cabeçalho, hoje em dia esse é meu foreach:

 

foreach (var linha in (IEnumerable<DataRow>)dados)
                        {
                            List<Processo> listaProcessoExistente = new List<Processo>();
                            Processo processo = null;
                            Interessado interessado = new Interessado();

                            //busca o processo pelo nº judicial anterior ou atual
                            if (!linha.ItemArray[1].ToString().Equals(""))
                                processo = aplProcesso.consultar---ProcessoER(linha.ItemArray[1].ToString());
                            if (processo == null)
                            {
                                if (!linha.ItemArray[2].ToString().Equals(""))
                                    processo = aplProcesso.consultar---ProcessoER(linha.ItemArray[2].ToString());
                            }

                            //busca o interessado por cpf/cnpj
                            if (linha.ItemArray[7].ToString().Length == 14)
                                interessado = aplInteressado.ConsultarPorCPF(AuxiliarCPF_CNPJ.DesformataCPF(linha.ItemArray[7].ToString()));

                            if (linha.ItemArray[7].ToString().Length == 18)
                                interessado = aplInteressado.ConsultarPorCPF(AuxiliarCPF_CNPJ.DesformataCNPJ(linha.ItemArray[7].ToString()));
                            if (processo != null)
                            {
                                //se o processo não for nulo busco todos procinter relacionados a ele
                                List<ProcessoInteressado> listaprocinter = aplProcessoInteressado.consultarPorIdProcesso(processo.Codigo);
                                if (listaprocinter.Exists(o => o.Interessado == interessado))
                                    //String.Concat(row.ToString());
                                    log.Append("O interessado  " + processo.Interessado.Nome + ", informado na linha " + ("É aqui que estou tentando pegar o indice da linha 6 a diante") + " foi adicionado novamente ao processo " + processo.NumProcessoJudicial + " <br>");
                                //log.Append("O interessado " + processo.Interessado.Nome + " foi adicionado novamente ao processo " + processo.NumProcessoJudicial + " <br>");
                                // log.Append("O interessado " + processo.Interessado.Nome + " foi adicionado novamente ao processo " + processo.NumProcessoJudicial + " <br>");
                                setProcInter(processo, interessado, ds, row);
                            }
  }

você saberia uma solução para isso, porque estou precisando somente disso para finalizar :/ me ajuda por favor amigo.

Compartilhar este post


Link para o post
Compartilhar em outros sites
4 horas atrás, quintelab disse:

Basta colocar uma variável que vai incrementando dentro do seu foreach.


int indiceDaLinha = 0;

foreach (var linha in (IEnumerable<DataRow>)dados)
{
  indiceDaLinha++;
  //resto do seu codigo
}

 

quintelab, bom dia!

Eu fiz da seguinte forma:

private System.Threading.Tasks.Task ProcessamentoTabela(IEnumerable<DataRow> dadosparam, int i, Usuario usuarioLogado)
        {
  
  			i = 4;
  			
  			Action<object> processamento = (dados) =>
            {
                /*if (NHibernate.Context.ThreadStaticSessionContext.HasBind(NhibernateHelper.SessionFactory.))*/
                NHibernate.Context.ThreadStaticSessionContext.Bind(NhibernateHelper.HelpThreading().OpenSession());
              
              foreach (var linha in (IEnumerable<DataRow>)dados)
                {
                    
                    i++;
                
                if (processo != null)
                    {
                        //se o processo não for nulo busco todos procinter relacionados a ele
                        List<ProcessoInteressado> listaprocinter = aplProcessoInteressado.consultarPorIdProcesso(processo.Codigo);
                        if (listaprocinter.Exists(o => o.Interessado == interessado))
                            log.Append("O interessado  " + processo.Interessado.Nome + ", informado na linha " + (i + 1) + " foi adicionado novamente ao processo " + processo.NumProcessoJudicial + " <br>");
                        //log.Append("O interessado " + processo.Interessado.Nome + " foi adicionado novamente ao processo " + processo.NumProcessoJudicial + " <br>");
                        // log.Append("O interessado " + processo.Interessado.Nome + " foi adicionado novamente ao processo " + processo.NumProcessoJudicial + " <br>");
                        setProcInter(processo, interessado, linha, i);
                    }

                    else
                    {
                        //Novo Processo - 6.3
                        processo = new Processo();
                        processo.Interessado = interessado;
                    }
              }
            
            }
}

Porém me tras o indice do interessado errado. Isso que está f***..

Por exemplo, Joana na minha planilha é linha 89, porém quando mostro o indice me informa no log que Joana é o indice 6 da minha planilha, isso que está pegando. Postei um tópico de como popular o meu datatable pra pegar o indice direto nesse método, porém não obtive êxito até o momento.

 

Você sabe como eu poderia fazer para popular meu DataTable no meu método de importar e pegar o indice já de inicio e passar aqui dentro desse outro método o indice direto?

Compartilhar este post


Link para o post
Compartilhar em outros sites
54 minutos atrás, quintelab disse:

Dificil saber o motivo, você tem que debugar pra entender o motivo, sabendo o motivo iremos conseguir ajudar com uma solução.

Então, quintelab, eu compilei aqui e todos os interessados da minha planilha passa na validação de duplicidade, porém quando entra no método da threading para mostrar o log para o usuário, ele não informa o indice correto,  tipo, ele passa nessa validação de duplicidade e em seguida e ele entra dentro da threading, porém os logs estão vindo errados, aparece o seguinte:

 

Log de Importação:
 

O interessado SIMONE MARTINS TEIXEIRA, informado na linha 13 foi adicionado novamente ao processo 0000112-75.2016.8.08.0012 
O interessado REGINA DE CASTRO BORGES ABREU, informado na linha 6 foi adicionado novamente ao processo 0000051-63.2017.8.08.0051 

 

 

O correto é aparecer o seguinte log:

Log de Importação:

   

O interessado informado na linha 13 foi adicionado novamente ao processo 0000112-75.2016.8.08.0012 
O interessado informado na linha 54 foi adicionado novamente ao processo 0000349-28.2017.8.08.0060 
O interessado informado na linha 161 foi adicionado novamente ao processo 0000525-07.2015.8.08.0018 
O interessado informado na linha 298 foi adicionado novamente ao processo 0001144-35.2014.8.08.0029 
O interessado informado na linha 386 foi adicionado novamente ao processo 0000051-63.2017.8.08.0051 
O interessado informado na linha 421 foi adicionado novamente ao processo 0001243-80.2016.8.08.0046 

 

Eu sei que a linha 13 pertence a Simone, mas a REGINA DE CASTRO BORGES ABREU pertence a linha 386.

O interessado da linha 6 se chama Frederico Vilella, isso que está pegando. :/

Compartilhar este post


Link para o post
Compartilhar em outros sites
Agora, quintelab disse:

Sem debugar fica bem dificil ajudar. Debugando não é algo complexo de resolver, você precisa colocar breakpoints onde modifica sua variável i e entender por que ela esta assumindo um valor errado. 

Beleza, vou ver aqui.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 14/05/2018 at 11:39, quintelab disse:

Sem debugar fica bem dificil ajudar. Debugando não é algo complexo de resolver, você precisa colocar breakpoints onde modifica sua variável i e entender por que ela esta assumindo um valor errado. 

Tentei fazer da seguinte forma:

List<string> indicelinha = new List<string>();
                foreach (var item in indicelinha.Select((value, index) => new { Value = value, Index = index }))
                {
                    //Obtém o valor através de item.Value;
                    string currentValue = item.Value;
                    //Obtém o índice por meio de item.Index;
                    int currentIndex = item.Index;
                }
  
  					foreach (var linha in (IEnumerable<DataRow>)dados)
                    {
                        //i++;
                        List<Processo> listaProcessoExistente = new List<Processo>();
                        Processo processo = null;
                        Interessado interessado = new Interessado();

                        //busca o processo pelo nº judicial anterior ou atual
                        if (!linha.ItemArray[1].ToString().Equals(""))
                            processo = aplProcesso.consultar---ProcessoER(linha.ItemArray[1].ToString());
                        if (processo == null)
                        {
                            if (!linha.ItemArray[2].ToString().Equals(""))
                                processo = aplProcesso.consultar---ProcessoER(linha.ItemArray[2].ToString());
                        }

                        //busca o interessado por cpf/cnpj
                        if (linha.ItemArray[7].ToString().Length == 14)
                            interessado = aplInteressado.ConsultarPorCPF(AuxiliarCPF_CNPJ.DesformataCPF(linha.ItemArray[7].ToString()));

                        if (linha.ItemArray[7].ToString().Length == 18)
                            interessado = aplInteressado.ConsultarPorCPF(AuxiliarCPF_CNPJ.DesformataCNPJ(linha.ItemArray[7].ToString()));
                        if (processo != null)
                        {
                            //se o processo não for nulo busco todos procinter relacionados a ele
                            List<ProcessoInteressado> listaprocinter = aplProcessoInteressado.consultarPorIdProcesso(processo.Codigo);
                            if (listaprocinter.Exists(o => o.Interessado == interessado))
                                log.Append("O interessado  " + processo.Interessado.Nome + ", informado na linha " + (indicelinha) + " foi adicionado novamente ao processo " + processo.NumProcessoJudicial + " <br>");
                            //log.Append("O interessado " + processo.Interessado.Nome + " foi adicionado novamente ao processo " + processo.NumProcessoJudicial + " <br>");
                            // log.Append("O interessado " + processo.Interessado.Nome + " foi adicionado novamente ao processo " + processo.NumProcessoJudicial + " <br>");
                            setProcInter(processo, interessado, linha, i);
                        }

                        else
                        {
                            //Novo Processo - 6.3
                            processo = new Processo();
                            processo.Interessado = interessado;
       }
  

Porém me retorna o seguinte:

 

Log de Importação:
 

O interessado SIMONE MARTINS TEIXEIRA, informado na linha System.Collections.Generic.List`1[System.String] foi adicionado novamente ao processo 0000112-75.2016.8.08.0012 
O interessado REGINA DE CASTRO BORGES ABREU, informado na linha System.Collections.Generic.List`1[System.String] foi adicionado novamente ao processo 0000051-63.2017.8.08.0051 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal, resolvi o problema da seguinte forma, um pouco gambiarra, mas funcionou,

 

Dentro do meu método importar, declarei a seguinte função:

 Dados = DadosExcel(Excel);

                        Dados.Columns.Add("indice", typeof(int));
                        // Gambiarra, porém funciona, pegando os valores(indice da linha)
                        int i = 1;

                        foreach (DataRow linha in Dados.Rows)
                        {                            
                            linha["indice"] = i;
                            i++;
                        }

e dentro do método da Threading eu passei o índice no log abaixo:

 

private System.Threading.Tasks.Task ProcessamentoTabela(IEnumerable<DataRow> dadosparam, int i, Usuario usuarioLogado)
        
  {
            
            i = 4;
            Action<object> processamento = (dados) =>
            {
  			
  				 NHibernate.Context.ThreadStaticSessionContext.Bind(NhibernateHelper.HelpThreading().OpenSession());
  
  					foreach (var linha in (IEnumerable<DataRow>)dados)
                    {
                        i++;
  
  						log.Append("O interessado  " + processo.Interessado.Nome + ", informado na linha " + (linha["indice"]) + " foi adicionado novamente ao processo " + processo.NumProcessoJudicial + " <br>");
  
                     }
             }
  }

Estou compartilhando com vocês a solução, pois vai que alguém um dia precise, deixo aqui a minha contribuição, obrigado aos demais colegas do fórum que procuraram me orientar e ajudar, muito obrigado mesmo. Problema solucionado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por mr22robot
      Ola caros amigos. 
      Estou com uma dúvida aqui que embora nao tenho achado ainda uma resposta, acredito que haja.
      Estou estudando a tão sonhada linguagem de programação asp.net core mvc. Linguagem essa que demorei 5 anos pra iniciar os estudos rsrs.
      Mas estou agarrado em uma situação. 
      Estou usando como base de dados nos meus estudos um banco Oracle. Que já tem algumas informações nele. Utilizei o SCAFFOLD para criar as classes e o contexto baseado no banco e tabelas existentes. 
      Porem agora na fase das consultas, estou perdido em como utilizar o IN que eu utilizo no oracle; no LINQ.
      Ex: 
      SELECT CODPROD,DESCRICAO FROM PRODUTO WHERE CODPROD IN(1,2,3,4,5,6) Como eu utilizo esse filtro com uma restrição de códigos de produtos? no caso o where codprod in(1,2,3,4,5,6) ?.
      Desde já obrigado pela ajuda.
    • Por luis0101010
      1.      Programe uma função que recebe um número inteiro e verifica se todos os dígitos deste número são iguais ou diferente e liste eles em ordens crescentes.
      Obs: Código fonte com no mínimo de 10 dígitos.
       
      Como exemplo, os números 456, −235, e 5 satisfazem esta condição, enquanto que o número 6 não.
       
      2.      Crie também a função main que recebe o valor do número digitado pelo usuário e exibe na tela uma mensagem informando se os dígitos deste número são iguais.
       
      Exemplo:
      --Exemplo 1:
      Informe um número:
      -555
      Numero informado possui todos os dígitos iguais
      --Exemplo 2:
      Informe um número:
      67
      Número informado não possui todos os dígitos iguais
    • Por Ilano
      Olá pessoal,
       
      Utilizo Visual Studio para desenvolver minhas aplicações web e estou tendo problemas ao montar meus submenus. O menu normal está sendo montado direitinho mas, quando preciso montar os submenus não dá certo. Já pesquisei pela web e o máximo que consegui foi a montagem de um menu normal. Alguém poderia me dar uma dica de como melhorar meu código para que finalmente consiga montar um menu com vários níveis de submenus? Abaixo segue todo o código.
       
      Aqui está minha tabela:
      CREATE TABLE [dbo].[MENUS]( [ID] [int] NOT NULL, [PARENTEID] [int] NULL, [NOME] [varchar](100) NOT NULL, [DESCRICAO] [varchar](100) NOT NULL, [ARQUIVO] [varchar](100) NULL, [TARGETMENU] [varchar](10) NULL, [NIVEL] [int] NULL, [ORDENAR] [int] NOT NULL, CONSTRAINT [PK_MENUS] PRIMARY KEY CLUSTERED ( [ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO ALTER TABLE [dbo].[MENUS] WITH CHECK ADD CONSTRAINT [MENUS_fk] FOREIGN KEY([PARENTEID]) REFERENCES [dbo].[MENUS] ([ID]) GO ALTER TABLE [dbo].[MENUS] CHECK CONSTRAINT [MENUS_fk] GO  
      Aqui segue os inserts:
       
      (Nenhum nome de coluna) INSERT INTO MENUS (ID, PARENTEID, NOME, DESCRICAO, ARQUIVO, TARGETMENU, NIVEL, ORDENAR) VALUES ( 1, NULL,'Auxiliares', 'Cadastro de auxiliares', '#', '_self', 1,1); INSERT INTO MENUS (ID, PARENTEID, NOME, DESCRICAO, ARQUIVO, TARGETMENU, NIVEL, ORDENAR) VALUES ( 2, NULL,'Cursos', 'Cadastro de cursos e editais', '#', '_self', 2,1); INSERT INTO MENUS (ID, PARENTEID, NOME, DESCRICAO, ARQUIVO, TARGETMENU, NIVEL, ORDENAR) VALUES ( 3, NULL,'Matricula', 'Cadastro de matrículas', '#', '_self', 3,1); INSERT INTO MENUS (ID, PARENTEID, NOME, DESCRICAO, ARQUIVO, TARGETMENU, NIVEL, ORDENAR) VALUES ( 4, NULL,'Seguranca', 'Cadastros de segurança', '#', '_self', 4,1); INSERT INTO MENUS (ID, PARENTEID, NOME, DESCRICAO, ARQUIVO, TARGETMENU, NIVEL, ORDENAR) VALUES ( 5, NULL,'Marketing', 'Cadastro de marketing', '#', '_self', 5,1); INSERT INTO MENUS (ID, PARENTEID, NOME, DESCRICAO, ARQUIVO, TARGETMENU, NIVEL, ORDENAR) VALUES ( 6, NULL,'Ferramentas', 'Cadastro de ferramentas', '#', '_self', 6,1); INSERT INTO MENUS (ID, PARENTEID, NOME, DESCRICAO, ARQUIVO, TARGETMENU, NIVEL, ORDENAR) VALUES ( 7, 1, 'Benefícios', 'Cadastro de benfícios do edital', 'cadBeneficios.aspx', '_self', 1,1); INSERT INTO MENUS (ID, PARENTEID, NOME, DESCRICAO, ARQUIVO, TARGETMENU, NIVEL, ORDENAR) VALUES ( 8, 1, 'Cargos', 'Cadastro de cargos', 'cadCargos.aspx', '_self', 1,2); INSERT INTO MENUS (ID, PARENTEID, NOME, DESCRICAO, ARQUIVO, TARGETMENU, NIVEL, ORDENAR) VALUES ( 9, 1, 'Países', 'Cadastro de países', 'cadPaises.aspx', '_self', 1,3); INSERT INTO MENUS (ID, PARENTEID, NOME, DESCRICAO, ARQUIVO, TARGETMENU, NIVEL, ORDENAR) VALUES ( 10, 1, 'Estados', 'Cadastro de estados', 'cadEstados.aspx', '_self', 1,4); INSERT INTO MENUS (ID, PARENTEID, NOME, DESCRICAO, ARQUIVO, TARGETMENU, NIVEL, ORDENAR) VALUES ( 11, 1, 'Macrorregião', 'Cadastro de macrorregiões', 'cadMacroregiao.aspx', '_self', 1,5); INSERT INTO MENUS (ID, PARENTEID, NOME, DESCRICAO, ARQUIVO, TARGETMENU, NIVEL, ORDENAR) VALUES ( 12, 1, 'Cidades', 'Cadastro de cidades', 'cadCidades.aspx', '_self', 1,6); INSERT INTO MENUS (ID, PARENTEID, NOME, DESCRICAO, ARQUIVO, TARGETMENU, NIVEL, ORDENAR) VALUES ( 13, 1, 'Escolaridade', 'Cadastro de escolaridades', 'cadEscolaridade.aspx', '_self', 1,7); INSERT INTO MENUS (ID, PARENTEID, NOME, DESCRICAO, ARQUIVO, TARGETMENU, NIVEL, ORDENAR) VALUES ( 14, 1, 'Estado civil', 'Cadastro de estado civil', 'cadEstadoCivil.aspx', '_self', 1,8); INSERT INTO MENUS (ID, PARENTEID, NOME, DESCRICAO, ARQUIVO, TARGETMENU, NIVEL, ORDENAR) VALUES ( 15, 1, 'Expectativas', 'cadastro de expectativas', 'cadExpectativas.aspx', '_self', 1,9); INSERT INTO MENUS (ID, PARENTEID, NOME, DESCRICAO, ARQUIVO, TARGETMENU, NIVEL, ORDENAR) VALUES ( 16, 1, 'Fonte de recursos', 'Cadastro de fontes de recursos', 'cadFonteRecursos.aspx', '_self', 1,10); INSERT INTO MENUS (ID, PARENTEID, NOME, DESCRICAO, ARQUIVO, TARGETMENU, NIVEL, ORDENAR) VALUES ( 17, 1, 'Lotação', 'Cadastro de lotação', 'cadLotacao.aspx', '_self', 1,11); INSERT INTO MENUS (ID, PARENTEID, NOME, DESCRICAO, ARQUIVO, TARGETMENU, NIVEL, ORDENAR) VALUES ( 18, 1, 'Modalidades', 'Cadastro de modalidades', 'cadModalidades.aspx', '_self', 1,12); INSERT INTO MENUS (ID, PARENTEID, NOME, DESCRICAO, ARQUIVO, TARGETMENU, NIVEL, ORDENAR) VALUES ( 19, 2, 'Motivos', 'Cadastro de motivos', 'cadMotivos.aspx', '_self', 2,4); INSERT INTO MENUS (ID, PARENTEID, NOME, DESCRICAO, ARQUIVO, TARGETMENU, NIVEL, ORDENAR) VALUES ( 20, 1, 'Necessidades especiais', 'Cadastro de necessidades especiais', 'cadNecessidadesEspeciais.aspx', '_self', 1,14); INSERT INTO MENUS (ID, PARENTEID, NOME, DESCRICAO, ARQUIVO, TARGETMENU, NIVEL, ORDENAR) VALUES ( 21, 1, 'Pré-requisitos', 'Cadastro de pré-requisitos', 'cadPrerrequisitos.aspx', '_self', 1,15); INSERT INTO MENUS (ID, PARENTEID, NOME, DESCRICAO, ARQUIVO, TARGETMENU, NIVEL, ORDENAR) VALUES ( 22, 1, 'Profissões', 'Cadastro de profissões', 'cadProfissoes.aspx', '_self', 1,16); INSERT INTO MENUS (ID, PARENTEID, NOME, DESCRICAO, ARQUIVO, TARGETMENU, NIVEL, ORDENAR) VALUES ( 23, 1, 'Projetos', 'Cdastro de projetos', 'cadProjetos.aspx', '_self', 1,17); INSERT INTO MENUS (ID, PARENTEID, NOME, DESCRICAO, ARQUIVO, TARGETMENU, NIVEL, ORDENAR) VALUES ( 24, 1, 'Setor beneficiado', 'Cdastro de setores beneficiados', 'cadSetorBeneficiado.aspx', '_self', 1,18); INSERT INTO MENUS (ID, PARENTEID, NOME, DESCRICAO, ARQUIVO, TARGETMENU, NIVEL, ORDENAR) VALUES ( 25, 2, 'Eixos', 'Cadastro de eixos', 'cadEixos.aspx', '_self', 2,1); INSERT INTO MENUS (ID, PARENTEID, NOME, DESCRICAO, ARQUIVO, TARGETMENU, NIVEL, ORDENAR) VALUES ( 26, 2, 'Cursos', 'Cadastro de cursos', 'cadCursos.aspx', '_self', 2,2); INSERT INTO MENUS (ID, PARENTEID, NOME, DESCRICAO, ARQUIVO, TARGETMENU, NIVEL, ORDENAR) VALUES ( 27, 2, 'Editais', 'Cadastro de editais', 'cadEdital.aspx', '_self', 2,3); Aqui tem o objeto objMenus.vb
       
      Imports System.Data.SqlClient Namespace DETI Public Class objMenu Private Db As classDatabase.DbSql Private Cm As SqlCommand Private Fn As New Funcoes.classFuncao ' DeclaMENUo das variaveis Private vlID As Integer Private vlNOME As String Private vlDESCRICAO As String Private vlARQUIVO As String Private vlTARGETMENU As String Private vlPARENTEID As Integer Private vlNIVEL As Integer Private vlORDENAR As Integer ' DeclaMENUo das propriedades Property ID() Get Return vlID End Get Set(ByVal Value) vlID = Value End Set End Property Property NOME() Get Return vlNOME End Get Set(ByVal Value) vlNOME = Value End Set End Property Property DESCRICAO() Get Return vlDESCRICAO End Get Set(ByVal Value) vlDESCRICAO = Value End Set End Property Property ARQUIVO() Get Return vlARQUIVO End Get Set(ByVal Value) vlARQUIVO = Value End Set End Property Property TARGETMENU() Get Return vlTARGETMENU End Get Set(ByVal Value) vlTARGETMENU = Value End Set End Property Property PARENTEID() Get Return vlPARENTEID End Get Set(ByVal Value) vlPARENTEID = Value End Set End Property Property NIVEL() Get Return vlNIVEL End Get Set(ByVal Value) vlNIVEL = Value End Set End Property Property ORDENAR() Get Return vlORDENAR End Get Set(ByVal Value) vlORDENAR = Value End Set End Property ' DeclaMENUo dos procedimentos Public Function Inserir() Dim pParametro As String = DBNull.Value.ToString If vlPARENTEID > 0 Then pParametro = " AND A.PARENTEID = " & vlPARENTEID Try Cm = New SqlCommand ' Gera o código Db = New classDatabase.DbSql Db.NomeTabela = "MENUS" vlID = Db.Chave("ID") Db = Nothing With Cm.Parameters .AddWithValue("@ID", vlID) If vlPARENTEID > 0 Then .AddWithValue("@PARENTEID", vlPARENTEID) Else .AddWithValue("@PARENTEID", DBNull.Value) .AddWithValue("@NOME", Trim(vlNOME)) If Trim(vlDESCRICAO) <> DBNull.Value.ToString Then .AddWithValue("@DESCRICAO", Trim(vlDESCRICAO)) Else .AddWithValue("@DESCRICAO", DBNull.Value) If Trim(vlARQUIVO) <> DBNull.Value.ToString Then If Right(Trim(vlARQUIVO), 5) <> ".aspx" Then .AddWithValue("@ARQUIVO", Trim(vlARQUIVO) & ".aspx") Else .AddWithValue("@ARQUIVO", Trim(vlARQUIVO)) Else If Trim(vlARQUIVO) = DBNull.Value.ToString Then .AddWithValue("@ARQUIVO", "#") End If End If If Trim(vlTARGETMENU) <> DBNull.Value.ToString Then .AddWithValue("@TARGETMENU", Trim(vlTARGETMENU)) Else .AddWithValue("@TARGETMENU", "_self") .AddWithValue("@NIVEL", vlNIVEL) .AddWithValue("@ORDENAR", vlORDENAR) End With If Busca(" A.NOME = '" & Trim(vlNOME) & "' AND A.ARQUIVO = '" & Trim(vlARQUIVO) & "' " & pParametro) Then Return "REGISTRO JÁ CADASTRADO!" Else ' Cria uma instância do objeto de conexao com o banco de dados ' e preenche os dados necessarios para realizar as operacoes Db = New classDatabase.DbSql Db.NomeTabela = "MENUS" Return Db.Salvar(Cm) End If Catch ex As Exception Return "OCORREU UM ERRO AO TENTAR INCLUIR UM NOVO REGISTRO:" & ex.Message Finally Cm = Nothing Db = Nothing End Try End Function Public Function Alterar() As String Dim pParametro As String = DBNull.Value.ToString If vlPARENTEID > 0 Then pParametro = " AND A.PARENTEID = " & vlPARENTEID Try Cm = New SqlCommand With Cm.Parameters If vlPARENTEID > 0 Then .AddWithValue("@PARENTEID", vlPARENTEID) Else .AddWithValue("@PARENTEID", DBNull.Value) .AddWithValue("@NOME", Trim(vlNOME)) If Trim(vlDESCRICAO) <> DBNull.Value.ToString Then .AddWithValue("@DESCRICAO", Trim(vlDESCRICAO)) Else .AddWithValue("@DESCRICAO", DBNull.Value) If Trim(vlARQUIVO) <> DBNull.Value.ToString And Trim(vlARQUIVO) <> "#" And Trim(vlARQUIVO) <> "#.aspx" Then If Right(Trim(vlARQUIVO), 5) <> ".aspx" Then .AddWithValue("@ARQUIVO", Trim(vlARQUIVO) & ".aspx") Else .AddWithValue("@ARQUIVO", Trim(vlARQUIVO)) Else If Trim(vlARQUIVO) = DBNull.Value.ToString Then .AddWithValue("@ARQUIVO", "#") End If End If If Trim(vlTARGETMENU) <> DBNull.Value.ToString Then .AddWithValue("@TARGETMENU", Trim(vlTARGETMENU)) Else .AddWithValue("@TARGETMENU", "_self") .AddWithValue("@NIVEL", vlNIVEL) .AddWithValue("@ORDENAR", vlORDENAR) End With If Busca(" A.ID <> " & vlID & pParametro & " AND A.NOME = '" & Trim(vlNOME) & "' AND A.ARQUIVO = '" & Trim(vlARQUIVO) & "' ") Then Return "REGISTRO JÁ CADASTRADO!" Else ' Cria uma instância do objeto de conexao com o banco de dados ' e preenche os dados necessarios para realizar as operacoes Db = New classDatabase.DbSql Db.NomeTabela = "MENUS" Return Db.Salvar(Cm, "ID", vlID) End If Catch ex As Exception Return "Erro:" & ex.Message Finally Cm = Nothing Db = Nothing End Try End Function Public Function Excluir() As String Try ' Cria uma instância do objeto de conexao com o banco de dados ' e preenche os dados necessarios para realizar as operacoes Db = New classDatabase.DbSql Db.NomeTabela = "MENUS" Return Db.Excluir("ID", vlID) Catch ex As Exception Return "OCORREU UM ERRO AO TENTAR EXCLUIR ESTE REGISTRO: " & ex.Message Finally Db = Nothing End Try End Function Public Function Consultar(ByVal pParametro As String, ByVal pOrdem As String) As Data.DataSet Dim SQL As New System.Text.StringBuilder SQL.Append(" SELECT A.ID, PARENTEID = ISNULL(A.PARENTEID, 0), A.NOME, A.DESCRICAO, ") SQL.Append(" A.ARQUIVO, A.ORDENAR, ORDEMPARENTE = B.ORDENAR, PARENTE = B.NOME, ") SQL.Append(" CONTAR = ROW_NUMBER() OVER(PARTITION BY A.PARENTEID ORDER BY A.PARENTEID ASC), ") SQL.Append(" LINKARQUIVO = CASE WHEN B.ARQUIVO Is NULL And A.PARENTEID Is NULL THEN '' ") SQL.Append(" WHEN LTRIM(RTRIM(B.ARQUIVO)) IS NULL AND A.PARENTEID IS NULL THEN 'http://localhost:1219/' + A.ARQUIVO ") SQL.Append(" WHEN LTRIM(RTRIM(B.ARQUIVO)) = '' AND A.PARENTEID IS NULL THEN '' ") SQL.Append(" ELSE 'http://localhost:1219/' + ISNULL(B.NOME + '/', '') + ISNULL(A.ARQUIVO, '#') END, ") SQL.Append(" A.TARGETMENU, A.NIVEL, ") SQL.Append(" SELECIONA_TARGET = CASE A.TARGETMENU WHEN '_blank' THEN 'True' ELSE 'False' END, ") SQL.Append(" PARENTE = ISNULL(B.NOME, '') ") SQL.Append(" FROM MENUS A ") SQL.Append(" LEFT JOIN MENUS B ON (B.ID = A.PARENTEID) ") If Trim(pParametro) <> "" Then SQL.Append(" WHERE " & pParametro & "") If Trim(pOrdem) <> "" Then SQL.Append(" ORDER BY " & Trim(pOrdem)) Else SQL.Append(" ORDER BY A.PARENTEID, CONTAR ") Try ' Cria uma instância do objeto de conexao com o banco de dados ' e preenche os dados necessarios para realizar as operacoes Db = New classDatabase.DbSql Return Db.Consultar(SQL.ToString) Catch ex As Exception Return Nothing Finally Db = Nothing End Try End Function Public Function ConsultarTopo(ByVal pParametro As String) As Data.DataSet Dim SQL As New System.Text.StringBuilder SQL.Append(" SELECT TOP " & vlID & " ID ") SQL.Append(" FROM MENUS ") If Trim(pParametro) <> "" Then SQL.Append(" WHERE " & pParametro & " ") SQL.Append(" ORDER BY NOME ") Try ' Cria uma instância do objeto de conexao com o banco de dados ' e preenche os dados necessarios para realizar as operacoes Db = New classDatabase.DbSql Return Db.Consultar(SQL.ToString) Catch ex As Exception Return Nothing Finally Db = Nothing End Try End Function Public Function ConsultaGenerica(ByVal pSQL As String) As Data.DataSet Dim SQL As New System.Text.StringBuilder SQL.Append(pSQL) Try ' Cria uma instância do objeto de conexao com o banco de dados ' e preenche os dados necessarios para realizar as operacoes Db = New classDatabase.DbSql Return Db.Consultar(SQL.ToString) Catch ex As Exception Return Nothing Finally Db = Nothing End Try End Function Public Function ExecutaSQLGenerica(ByVal pSQL As String) As String Dim Sql As New System.Text.StringBuilder Sql.Append(pSQL) Try 'Cria uma instância do objeto de conexao com o banco de dados ' e preenche os dados necessarios para realizar as operacoes Db = New classDatabase.DbSql Return Db.ExecutaSql(pSQL) Catch ex As Exception Return Nothing Finally Db = Nothing End Try End Function 'Função para retornar verdadeiro quando estação encontrada Private Function Busca(ByVal pParametro As String) As Boolean Dim Ds As Data.DataSet Ds = Consultar(pParametro, "") If Ds.Tables(0).Rows.Count <> 0 Then Return True Else Return False End If End Function End Class End Namespace  
      Em seguida, a página HTML:
       
      <%@ Master Language="VB" CodeFile="MasterPage.master.vb" Inherits="inicio_MasterPage" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> <script src="../bootstrap/js/bootstrap.min.js"></script> <script src="../bootstrap/js/jquery.3.6.0.min.js"></script> <script src="../Scripts/ckeditor/ckeditor.js"></script> <link href="../bootstrap/css/bootstrap.css" rel="stylesheet" /> <link href="../bootstrap/meuMenu.css" rel="stylesheet" /> <link href="../bootstrap/css/panel-tabs.css" rel="stylesheet" /> <link href="../bootstrap/css/meu-menu.css" rel="stylesheet" /> <link href="../Scripts/ckeditor/contents.css" rel="stylesheet" /> <script src="../CPF_CNPJ.js"></script> <script src="../Funcoes.js"></script> <style> .cssUsuario { background-color:transparent; background-image:url("../bootstrap/images/user.svg"); background-position:left; background-repeat:no-repeat; padding-left:22px; text-align:left; height:20px; width:auto; border:0px none; border-collapse:collapse; cursor:pointer; } .cssFilial { background-color:transparent; background-image:url("../bootstrap/images/filial.svg"); background-position:left; background-repeat:no-repeat; padding-left:22px; text-align:left; height:20px; width:auto; border:0px none; border-collapse:collapse; cursor:pointer; } .cssEmail { background-color:transparent; background-image:url("../bootstrap/images/email.svg"); background-position:left; background-repeat:no-repeat; padding-left:22px; text-align:left; height:20px; width:auto; border:0px none; border-collapse:collapse; cursor:pointer; } .visible { display:block; } .invisible { display:none; } </style> <asp:ContentPlaceHolder id="head" runat="server"> </asp:ContentPlaceHolder> </head> <body> <form id="form1" runat="server"> <div><asp:ScriptManager ID="ScriptManager1" runat="server" EnableScriptGlobalization="True"></asp:ScriptManager></div> <div> <ajaxToolkit:ModalPopupExtender ID="mpeFilial" runat="server" PopupControlID="panTrocaFilial" BackgroundCssClass="ajaxModal" TargetControlID="BtnTrocaFilialOculto" CancelControlID="BtnCancela" DropShadow="true"> </ajaxToolkit:ModalPopupExtender> </div> <div style="display:none;"> <asp:Button ID="BtnTrocaFilialOculto" runat="server" Text="Confirma" /> </div> <div> <asp:Panel ID="panTrocaFilial" runat="server" CssClass="alert alert-info" style="padding:10px !important; display:none;" > <div class="row"> <div class="col-sm-12"> <div><h5>TROCA DE FILIAL</h5></div> <div> <asp:UpdatePanel ID="upLbFiliais" runat="server"> <ContentTemplate> <asp:ListBox ID="lbFiliais" runat="server" CssClass="form-control small" DataTextField="FANTASIA" DataValueField="ID" style="height:200px !important;"></asp:ListBox> </ContentTemplate> </asp:UpdatePanel> </div> <div style="margin-top:10px;"> <div class="row"> <div class="col-sm-6"> <asp:UpdatePanel ID="upConfirmaTrocaUser" runat="server"> <ContentTemplate> <asp:Button ID="BtnConfirma" runat="server" CssClass="btn btn-success small" style="margin-right:5px;" Text="Confirma" /> </ContentTemplate> </asp:UpdatePanel> </div> <div class="col-sm-6"> <asp:Button ID="BtnCancela" runat="server" CssClass="btn btn-secondary small" style="margin-right:5px;" Text="Cancela" /> </div> </div> </div> </div> </div> </asp:Panel> </div> <div class="container-fluid"> <div class="row" style="background-color:greenyellow !important;"> <div class="col-sm-12"> <h3>Início</h3> </div> </div> <div class="row" style="background-color:greenyellow !important;"> <div class="col-sm-12"> <div> <asp:Menu ID="Menu1" runat="server" Orientation="Horizontal" RenderingMode="List" CssClass="navbar-nav mr-auto" StaticMenuItemStyle-CssClass="nav-item" > <DynamicHoverStyle CssClass="dropdown-menu" /> <DynamicMenuItemStyle CssClass="dropdown-item" VerticalPadding="5px" /> <DynamicMenuStyle CssClass="dropdown-menu" VerticalPadding="5px" /> <StaticHoverStyle CssClass="dropdown-menu" /> <StaticMenuItemStyle CssClass="dropdown-item" VerticalPadding="5px" ></StaticMenuItemStyle> </asp:Menu> </div> </div> </div> <div class="row" style="margin-bottom:20px !important; padding-bottom:10px; background-color:greenyellow;"> <div class="col-sm-4"> <asp:UpdatePanel ID="upUsuarioLogado" runat="server"> <ContentTemplate> <asp:Button ID="mpBtnUsuario" runat="server" /> </ContentTemplate> </asp:UpdatePanel> </div> <div class="col-sm-4"> <asp:UpdatePanel ID="upFilialLogado" runat="server"> <ContentTemplate> <asp:Button ID="mpBtnFilial" runat="server" /> </ContentTemplate> </asp:UpdatePanel> </div> <div class="col-sm-4"> <asp:UpdatePanel ID="upEmailLogado" runat="server"> <ContentTemplate> <asp:Button ID="mpBtnEmail" runat="server" /> </ContentTemplate> </asp:UpdatePanel> </div> </div> <div class="row"> <div class="col-sm-12"> <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server"></asp:ContentPlaceHolder> </div> </div> </div> </form> </body> </html>  
      E, finalmente, o código VB 
       
      Imports System.Data Imports System.Data.DataSet Imports System.Data.SqlClient Imports System.Linq Imports System.IO Imports System.Collections.Generic Imports System.Web.UI Imports System.Web.UI.Control Partial Class inicio_MasterPage Inherits System.Web.UI.MasterPage Private Menu As New DETI.objMenu Private MenuPerfil As New DETI.objPerfisMenus Private Menus As DataTable = New DataTable() Private Usuario As New DETI.objUsuarios Private Fn As New Funcoes.classFuncao Private Sub getMenu() Dim Ds As DataSet = New DataSet() Dim dt As DataTable = New DataTable() Dim pItem As Integer = 0 'Ds = Menu.Consultar(" A.ID IN (SELECT X.MENUID FROM PERFISMENUS X WHERE X.PERFILID = " & Session("sPerfilID") & ") ", "") Ds = Menu.Consultar("", "") Menu1.Items.Add(New MenuItem("<span style='padding:1px 5px 1px 5px;'>Home</span>", 0, "", Fn.PegaDominioDaAplicacao & "/inicio/index.aspx")) If Not ds Is Nothing Then If ds.Tables(0).Rows.Count > 0 Then dt = ds.Tables(0) Dim drowpar As DataRow() = dt.[Select]("PARENTEID = " & 0) For Each dr As DataRow In drowpar Menu1.Items.Add(New MenuItem("<span style='padding:1px 5px 1px 5px;'>" & dr("NOME").ToString() & "</span>", dr("ID").ToString(), "", dr("LINKARQUIVO").ToString())) pItem = dr("ID") Next For Each dr As DataRow In dt.[Select]("PARENTEID > " & 0) Dim mnu As MenuItem = New MenuItem("<span style='padding:1px 5px 1px 5px;'>" & dr("NOME").ToString() & "</span>", dr("ID").ToString(), "", dr("LINKARQUIVO").ToString()) Menu1.FindItem(dr("NIVEL").ToString()).ChildItems.Add(mnu) Next If pItem > 0 Then pItem = pItem + 1 End If End If Menu1.Items.Add(New MenuItem("<span style='padding:5px;'>Sair</span>", pItem, "", Fn.PegaDominioDaAplicacao & "/index.aspx")) End Sub Private Sub IdentificaUsuario() Dim Ds As Data.DataSet Ds = Usuario.ConsultaGenerica(" SELECT A.USUARIOID, B.LOGIN, B.EMAIL, C.FANTASIA " & " FROM USUARIOSFILIAIS A " & " INNER JOIN USUARIOS B ON (B.ID = A.USUARIOID) " & " INNER JOIN FILIAL C ON (C.ID = A.FILIALID) " & " WHERE A.USUARIOID = " & Session("sUsuario") & " AND A.FILIALID = " & Session("sFilial") & " AND B.PERFILID = " & Session("sPerfilID")) mpBtnUsuario.Text = "" If Not Ds Is Nothing Then If Ds.Tables(0).Rows.Count > 0 Then mpBtnUsuario.CssClass = "cssUsuario visible" mpBtnUsuario.Text = Ds.Tables(0).Rows(0)("LOGIN") mpBtnFilial.CssClass = "cssFilial visible" mpBtnFilial.Text = Ds.Tables(0).Rows(0)("FANTASIA") mpBtnEmail.CssClass = "cssEmail visible" mpBtnEmail.Text = Ds.Tables(0).Rows(0)("EMAIL") getMenu() Else If Ds.Tables(0).Rows.Count = 0 Then mpBtnUsuario.CssClass = "invisible" mpBtnFilial.CssClass = "invisible" mpBtnEmail.CssClass = "invisible" Response.Redirect("../index.aspx") End If End If Else If Ds Is Nothing Then Response.Redirect("../index.aspx") End If End If End Sub Private Sub inico_MasterPage_Load(sender As Object, e As EventArgs) Handles Me.Load If Not IsPostBack Then If Session("sUsuario") Is Nothing Then Response.Redirect("../index.aspx") Else If Not Session("sUsuario") Is Nothing Then If Session("sUsuario") > 0 Then IdentificaUsuario() Else If Session("sUsuario") = 0 Then Response.Redirect("../index.aspx") End If End If End If End If End If End Sub Protected Sub mpBtnFilial_Click(sender As Object, e As EventArgs) Handles mpBtnFilial.Click Dim Ds As Data.DataSet Ds = Usuario.ConsultaGenerica(" SELECT B.ID, B.FANTASIA " & " FROM USUARIOSFILIAIS A " & " INNER JOIN FILIAL B ON (B.ID = A.FILIALID) " & " WHERE B.ATIVO = 'True' " & " AND A.USUARIOID = " & Session("sUsuario")) lbFiliais.DataSource = Ds lbFiliais.DataBind() If Not Ds Is Nothing Then If Ds.Tables(0).Rows.Count > 0 Then mpeFilial.Show() End If End If End Sub Protected Sub BtnConfirma_Click(sender As Object, e As EventArgs) Handles BtnConfirma.Click If lbFiliais.SelectedIndex > -1 Then Session("sFilial") = lbFiliais.SelectedValue Usuario.ExecutaSQLGenerica(" UPDATE USUARIOS " & " SET ULTIMOFILIALID = " & lbFiliais.SelectedValue & " WHERE ID = " & Session("sUsuario")) IdentificaUsuario() mpeFilial.Hide() Else If lbFiliais.SelectedIndex = -1 Then End If End If End Sub End Class  
      Desde já agradeço a atenção.
       
      Obrigado,
       
      Ilano.
       
    • Por TheLord23
      ESTOU COMEÇANDO AGORA NA PROGRAMAÇÃO COM VISUALG E TERIA QUE COLOCAR ESTE CODIGO EM UM LAÇO DE REPETIÇÃO.
      POREM NÃO ESTOU CONSEGUINDO PODERIAM ME AJUDAR ?
       
      SÓ PENSANDO QUE O USUÁRIO IRA DIGITAR O TAMANHO DO VETOR, APOS ISSO CADA OPÇÃO QUE ELE ESCOLHER E ELA SER EXECUTADA DE FORMA CORRETA ELE VOLTARA PARA O MEUNU PRINCIPAL DAS OPÇÕES ATE QUE ELE SELECIONE A OPÇÃO "F"
       
      POREM TENTEI ESCREVELO USANDO ENQUANTO MAS ACABOU QUE EU NÃO CONSIGO PREVINIR OS ERROS DO USUÁRIO QUANDO ELE COLOCA AS INFORMAÇÕES
       
      TIPO:
      -ARMAZENAR UM NÚMERO NO VETOR E ESSE NÚMERO NÃO SER SOBRESCREVIDO ATE QUE O PROGRAMA SEJA ENCERRADO
      -SE ELE DIGITAR PRA BUSCAR OU INSERIR O NÚMERO ZERO O PROGRAMA INFORMAR QUE O VALOR É INVÁLIDO
       
      TENTEI USAR PROCEDIMENTOS E FUNÇÕES MAS OS ERROS CONTINUARAM.
       
       
       
      Algoritmo "DESAFIO"
      Var
         AUX,CONTADOR,BUSCAR:INTEIRO
         POSICAO,AUX_TEMP:INTEIRO
         OPCAO:CARACTERE
         RESULT_BUSCA: LOGICO
         SOMA_VET:REAL
         NUMERO:VETOR[1..500]DE INTEIRO
      Inicio
         ESCREVAL("*********************************")
         ESCREVAL("* CADASTRO DE VETORES - DESAFIO *")
         ESCREVAL("*********************************")
         ESCREVA("DIGITE O TAMANHO DO VETOR A SER CADASTRADO: ")
         LEIA(AUX)
         NUMERO[AUX] <- AUX
         ESCREVAL("A - Cadastrar um novo número;")
         ESCREVAL("B - Buscar um número")
         ESCREVAL("C - Excluir um número;")
         ESCREVAL("D - Listar os números cadastrados;")
         ESCREVAL("E - Exibir a soma dos números do vetor;")
         ESCREVAL("F - Sair do sistema.")
         LEIA(OPCAO)
         OPCAO <- MAIUSC(OPCAO)
         ESCOLHA OPCAO
         CASO "A"
            PARA CONTADOR DE 1 ATE NUMERO[AUX] FACA
               ESCREVA("DIGITE O VALOR QUE SERÁ ARMAZENADO NA",CONTADOR,"ª POSIÇÃO DO VETOR: ")
               LEIA(NUMERO[CONTADOR])
            FIMPARA
         CASO "B"
            ESCREVA("QUAL NÚMERO DESEJA ENCONTRAR: ")
            LEIA(BUSCAR)
            PARA CONTADOR DE 1 ATE NUMERO[AUX] FACA
               SE NUMERO[CONTADOR] = BUSCAR ENTAO
                  RESULT_BUSCA <- VERDADEIRO
                  POSICAO <- CONTADOR
               FIMSE
            FIMPARA
            PARA CONTADOR DE 1 ATE NUMERO[AUX] FACA
               ESCREVAL(NUMERO[CONTADOR])
            FIMPARA
            ESCREVAL("")
            ESCREVAL("---------")
            SE RESULT_BUSCA = VERDADEIRO ENTAO
               ESCREVAL("O NÚMERO",BUSCAR,"FOI ENCONTRADO E ESTA NA POSIÇÃO",POSICAO)
            SENAO
               ESCREVAL("O NÚMERO NÃO FOI ENCONTRADO !")
            FIMSE
         CASO "C"
            escreval("QUAL NÚMERO DESEJA EXCLUIR DO VETOR: ")
            leia(BUSCAR)
            SE NUMERO[CONTADOR] = BUSCAR ENTAO
               NUMERO[CONTADOR] <- 0
               ESCREVAL("O NÚMERO",BUSCAR,"NA POSIÇÃO",POSICAO,"DO VETOR FOI EXCLUIDO !")
            FIMSE
            PARA CONTADOR DE 1 ATE NUMERO[AUX]
               PARA AUX DE CONTADOR + 1 ATE AUX FACA
                  SE NUMERO[AUX] > NUMERO[CONTADOR]
                     AUX_TEMP <- NUMERO[AUX]
                     NUMERO[AUX] <- NUMERO[CONTADOR]
                     NUMERO[CONTADOR] <- AUX_TEMP
                  FIMPARA
               FIMPARA
               ESCREVA("VALROES DO VETOR: ")
               PARA CONTADOR DE 1 ATE NUMERO[AUX] FACA
                  ESCREVAL(NUMERO[CONTADOR])
               FIMPARA
            CASO "D"
               ESCREVA("VALORES DO VETOR: ")
               PARA CONTADOR DE 1 ATE NUMERO[AUX] FACA
                  ESCREVAL(NUMERO[CONTADOR])
               FIMPARA
            CASO "E"
               PARA CONTADOR DE 1 ATE NUMERO[AUX] FACA
                  SOMA_VET <- SOMA_VET + NUMERO[CONTADOR]]
               FIMPARA
               ESCREVAL("")
               ESCREVA("A SOMA DO VETOR É:",SOMA_VET)
               
            CASO "F"
               ESCREVAL("ENCERRANDO SISTEMA...")
            OUTROCASO
               ESCREVAL("OPÇÃO INVÁLIDA !")
            FIMESCOLHA
      Fimalgoritmo
    • Por thiago_tw
      eu to com uma tarefa que preciso de ajuda, já tentei alguns algoritmos que achei por aqui mas nunca dá certo, mandei a imagem do que é para ser feito, agradecido se me ajudarem

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.