Jump to content
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?

Share this post


Link to post
Share on other 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 :/

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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

Edited by Gabriel Heming
remover o quote

Share this post


Link to post
Share on other 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 :/

Edited by Gabriel Heming
remover o quote

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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
    }

 

Edited by Gabriel Heming
remover o quote e corrigir formatação

Share this post


Link to post
Share on other 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?

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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?

Share this post


Link to post
Share on other 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. :/

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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 

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Ana Caroline Candido
      Boa Tarde pessoal.
      Estou no 3 semestre do curso ciência da computação, e estou com muita dificuldade de achar uma forma de realizar um programa solicitado em meu trabalho semestral.
      Alguém poderia me ajudar, dar alguma luz de como posso começar a desenvolver?
      Segue :

      Deverá ser realizado um trabalho utilizando algoritmos considerando o seguinte exemplo: o geoprocessamento de imagens da floresta amazônica permite a fiscalização de ações de crimes ambientais. Os satélites geram cerca de 100 mil imagens de toda a região a cada 24 horas, essas imagens são armazenadas o catalogadas. Os agentes de fiscalização fazem buscas frequentes de imagens especificas nestas imagens. Cerca de 1000 buscas são feitas no intervalo de 24 horas. Deverá ser selecionado três ou mais estruturas de dados (Pilha ou Fila, Arvores, Vetor) e desenvolver um sistema computacional completo que obtenha os dados catalogados das imagens capturadas dos satélites e compare os desempenhos entre eles. A unidade de medida para efeito de comparação deverá ser o tempo total de ordenação. Deverá ser contabilizado o tempo de aquisição dos dados e o processo específico de busca) Os dados que serão utilizados para as ordenações deverão ser externos (obtidos a partir de valores previamente armazenados, tais como arquivos texto) e internos (valores aleatórios gerados pelo próprio programa ou fornecidos diretamente pelo usuário).  
    • By Rluz2019
      Avaliação Discursiva 4 - Calouros
      Questão A
      Na programação de computadores é muito comum o uso de estruturas iterativas para resolver problemas que envolvem coleções de dados (vetores, matrizes, listas). Considerando o seguinte trecho de código (notado em C#), que define a classe Funcionario:
      class Funcionario
      {
            public  int  Matricula  { get; set;  }
            public  string  Nome  { get; set;  }
            public static List< Funcionario> Funcionarios  {get; set;  }
      }
      Crie, na classe Funcionário:
      1.   Um método estático, denominado GerarLista, que cria e retorna uma lista com 10 registros de funcionários, sendo que:
      a)   A lista gerada será utilizada para preencher o atributo Funcionários, que é uma lista;
      b)   A matrícula deve ser um número inteiro sequencial (de 1 a 10);
      c)   O nome deve ser uma sequência de caracteres gerada aleatoriamente (podem ser nomes sorteados de uma lista pré-armazenada ou uma sequência qualquer de caracteres).
      2.   Um método estático, denominado BuscarFuncionario, que recebe um nome (string) por parâmetro, localiza o funcionário pelo nome na lista, e retorna a matrícula (int) do funcionário encontrado.
      ·       Caso o nome não seja encontrado, o retorno para a matrícula deve ser -1 (menos um).
       
      Meu Código!

      Estou com dificuldades de realizar algum poderia me ajudar a estruturar:
       CODIGO PRINCIPAL
      using System;
      //Using - Biblioteca do C#
      //___________________________________________________________//
      //           Aluno: Rodrigo Fernando da Luz                  //
      //           Faculdade - Fael                                //
      //___________________________________________________________//
      //Aula 02: Atributos e Métodos Unidade 04
      namespace Avaliação_Discursiva_4
      {
          class Program
          {
              static void Main(string[] args) // algoritmo Função ao metodo main
              {
                  GerarLista();
                  Console.ReadKey();
              }
              static void GerarLista()
              {
                  //Instanciar a Classe
                  Funcionario Nome_funcionario = new Funcionario(); //variavel #Nome_funcionario#
                  //Passar o conteudo que vai ser digitado para As Variaveis!!!
         
                  string[] Nomes = new string[10];
                  
                  Console.WriteLine("");
                  Console.WriteLine(" Lista gerada será utilizada para preencher o atributo Funcionários, que é uma lista:");
                  Console.WriteLine("");
                  char[] Xmatricula = new char[10];//Arry
                  char[] Xnome = new char[10];
                  int i;
                  //string Xnomes;
           
                  Console.WriteLine("");
                  Console.WriteLine("Digite Seu Nome: ");
                  Console.WriteLine("");
                  for (i = 0; i < 10; i++)
                  { //Contador 1 até 10.
                      Console.WriteLine("Informe Nome do  " + (i + 1) + " ª Funcionário:");
                      Xnome = char.Parse(Console.ReadLine());
                   
                  }
                  Console.WriteLine("");
                  Console.WriteLine("Lista de Funcionarios: ");
                  Console.WriteLine("");
                  for (i = 0; i < 10; i++)
                  {//Escreve na Tela o Numero 1 ate 10 e Nome do Funcionario.
                      Console.WriteLine("A Matricula: " + (i + 1) + "  ª Funcionario:  " + Nomes);
                  }
              }
          }
      }
       
       
      // CRIADO A CLASSE FUNCIONARIO:
      using System;
      using System.Collections.Generic;
      using System.Text;
      namespace Avaliação_Discursiva_4
      {
          //Atributos da minha Classe
          class Funcionario
          {
              //metodos Get e Set
              //Get Vai Pegar
              //Set vai Gravar
              public string Nome { get; set; }
              
              public int Matricula { get; set;}
              public string Materia { get; set; }
              public string Notas { get; set; }
              public static List<Funcionario> Funcionarios { get; set; }
              public void setNome(string Nome) //metodos //Set vai Gravar
              {
                  this.Nome = Nome;
              }
              public string getNome(string Nome) //metodos //Get vai Pegar
              {
                  return this.Nome;
              }
              public int getMatricula()//metodos //Get vai Pegar
              {
                  return this.Matricula;
              }
          }
      }
       
       
       
      Alguém pode me ajudar?
    • By rtavix
      Pessoal eu sou iniciante na programação, e irei detalhar todo o processo resumidamente que estou fazendo no momento. Eu tenho uma pagina web que realiza uma consulta através de uma determinada data. Tenho um dropdow e dentro dele eu tenho a Opção Mês base e Período, caso eu selecione o Mês base devo carregar um campo de data informando o mes e o ano e em seguida eu tenho dois radio button escrito a opção Sim e Não e caso escolho fazer o filtro por periodo, deverei carregar um capo de data automaticamente para informar um determinado periodo preenchendo a data de inicio dd/MM/yyyy até a data final dd/MM/yyyy, após escolher Mês base ou por Período dentro do dropDow e carregar o campo de data automaticamente onde o usuário informará a data, consequentemente o mesmo irá escolher se a opção é de Liberação Sim ou Não (radio button) acho que é assim que se escreve rs, caso ele realiza sua escolha, deverá carregar os seguintes dados na grid:
      AnoMêsBase, inscEstadual, razaoSocial e NME_ABREV.
      Observação: No meu banco de dados a coluna AnoMesBase está dessa forma por exemplo 032018, sempre irá vir dessa forma, a data nunca será formatado o campo.
      Porém não estou conseguindo trazer as informações que está no banco de dados.
      Até agora implementei as seguintes classes:
       
      using System; using System.Collections.Generic; using System.Linq; using System.Text; using NHibernate.Mapping.Attributes; namespace Dominio.Domain { [Serializable] [Class(Table = "DAP_EMPRESA", NameType = typeof(Empresa), Lazy = false)] public class Empresa { private int codigo; private string inscEstadual; private string razaoSocial; private string nomeAbreviado; private DateTime dataCadastro; private string cnpj; [Id(Column = "ID_EMPRESA", Name = "Codigo", Generator = "increment", UnsavedValue = "0")] public int Codigo { get { return codigo; } set { codigo = value; } } [Property(Column = "INSC_ESTADUAL", Lazy = false)] public string InscEstadual { get { return inscEstadual; } set { inscEstadual = value; } } [Property(Column = "RAZAO_SOCIAL", Lazy = false)] public string RazaoSocial { get { return razaoSocial; } set { razaoSocial = value; } } [Property(Column = "NME_ABREV", Lazy = false)] public string NomeAbreviado { get { return nomeAbreviado; } set { nomeAbreviado = value; } } [Property(Column = "DAT_CADASTRO", Lazy = false)] public DateTime DataCadastro { get { return dataCadastro; } set { dataCadastro = value; } } [Property(Column = "CNPJ", Lazy = false)] public string Cnpj { get { return cnpj; } set { cnpj = value; } } } } using NHibernate.Mapping.Attributes; using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace Dominio.Domain { [Serializable] [Class(Table = "DAP_FINANCIAMENTO", NameType = typeof(Financiamento), Lazy = false)] public class Financiamento { private int codigo; // private Empresa empresa; // private decimal vlrFinanciamento;// private string inscEstadual;// private string anoMesBase; // private string anoMesFaturamento; // private decimal vlrICMSPrevisto; // private decimal totalRecolhimento; // private DateTime datUltimoRecolhimento; // private decimal totalLiberacao; // private DateTime datLiberacao; // private DateTime datUltimaLiberacao; // private decimal totalDevolucao; // private string descObservacao; // private DateTime dataDevolucao; // private DateTime dataCadastramento; // private int mesBase; // private int mesFat; // [Id(Column = "ID_FINANCIAMENTO", Name = "Codigo", Generator = "increment", UnsavedValue = "0")] public int Codigo { get { return codigo; } set { codigo = value; } } [ManyToOne(0, Name = "Empresa", ClassType = typeof(Empresa), Column = "ID_EMPRESA", Lazy = Laziness.False)] public Empresa Empresa { get { return empresa; } set { empresa = value; } } [Property(Column = "VLR_FINANCIAMENTO", Lazy = false)] public decimal VlrFinanciamento { get { return vlrFinanciamento; } set { vlrFinanciamento = value; } } [Property(Column = "INSC_ESTADUAL", Lazy = false)] public string InscEstadual { get { return inscEstadual; } set { inscEstadual = value; } } [Property(Column = "ANO_MES_BASE", Lazy = false)] public string AnoMesBase { get { return anoMesBase; } set { anoMesBase = value; } } [Property(Column = "ANO_MES_FATURA", Lazy = false)] public string AnoMesFaturamento { get { return anoMesFaturamento; } set { anoMesFaturamento = value; } } [Property(Column = "VLR_ICMS_PREVISTO", Lazy = false)] public decimal VlrICMSPrevisto { get { return vlrICMSPrevisto; } set { vlrICMSPrevisto = value; } } [Property(Column = "TOTAL_RECOLHIDO", Lazy = false)] public decimal TotalRecolhimento { get { return totalRecolhimento; } set { totalRecolhimento = value; } } [Property(Column = "DATA_ULTIMO_RECOL", Lazy = false)] public DateTime DatUltimoRecolhimento { get { return datUltimoRecolhimento; } set { datUltimoRecolhimento = value; } } [Property(Column = "TOTAL_LIBERACAO", Lazy = false)] public decimal VlrTotalLiberacao { get { return totalLiberacao; } set { totalLiberacao = value; } } [Property(Column = "DAT_ULTIMA_LIBERACAO", Lazy = false)] public DateTime DatUltimaLiberacao { get { return datUltimaLiberacao; } set { datUltimaLiberacao = value; } } [Property(Column = "TOTAL_DEVOLUCAO", Lazy = false)] public decimal TotalDevolucao { get { return totalDevolucao; } set { totalDevolucao = value; } } [Property(Column = "DSC_OBSERVACAO", Lazy = false)] public string DescObservacao { get { return descObservacao; } set { descObservacao = value; } } [Property(Column = "DAT_LIBERACAO", Lazy = false)] public DateTime DatLiberacao { get { return datLiberacao; } set { datLiberacao = value; } } [Property(Column = "MES_BASE", Lazy = false)] public int MesBase { get { return mesBase; } set { mesBase = value; } } } } using Dominio.Domain; using NHibernate; using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace Dominio.DataAccess { public class FinanciamentoDAO { public static List<Financiamento> ListarTodos() { try { ISession sessao = NhibernateHelper.SessaoCorrente; Financiamento financiamento = new Financiamento(); ICriteria criterios = sessao.CreateCriteria(financiamento.GetType()); return criterios.List<Financiamento>().ToList(); } catch (Exception e) { throw new Exception(e.ToString()); } } public static void InserirOuAtualizar(Financiamento financiamento) { ISession sessao = NhibernateHelper.SessaoCorrente; ITransaction transacao = sessao.BeginTransaction(); try { sessao.SaveOrUpdate(financiamento); transacao.Commit(); } catch (Exception e) { transacao.Rollback(); throw new Exception(e.ToString()); } } public static void Deletar(Financiamento financiamento) { ISession sessao = NhibernateHelper.SessaoCorrente; ITransaction transacao = sessao.BeginTransaction(); try { sessao.Delete(financiamento); transacao.Commit(); } catch (Exception e) { transacao.Rollback(); throw new Exception(e.ToString()); } } internal static Financiamento BuscarPorInscEstadual(string InscEstadual) { try { ISession sessao = NhibernateHelper.SessaoCorrente; Financiamento financiamento = new Financiamento(); ICriteria criterios = sessao.CreateCriteria(financiamento.GetType()); criterios.Add(NHibernate.Criterion.Expression.Eq("InscEstadual", InscEstadual)); return criterios.UniqueResult() as Financiamento; } catch (Exception e) { throw new Exception(e.ToString()); } } internal static Financiamento BuscarPorIDFinanciamento(int COD_FINANCIAMENTO) { try { ISession sessao = NhibernateHelper.SessaoCorrente; Financiamento financiamento = new Financiamento(); ICriteria criterios = sessao.CreateCriteria(financiamento.GetType()); criterios.Add(NHibernate.Criterion.Expression.Eq("Codigo", COD_FINANCIAMENTO)); return criterios.UniqueResult() as Financiamento; } catch (Exception e) { throw new Exception(e.ToString()); } } internal static List<Financiamento> ListarPorEmpresa(int ID_EMPRESA) { ISession sessao = NhibernateHelper.SessaoCorrente; Financiamento financiamento; try { financiamento = new Financiamento(); ICriteria criterios = sessao.CreateCriteria(financiamento.GetType()); criterios.CreateAlias("Empresa", "e").Add(NHibernate.Criterion.Expression.Eq("e.Codigo", ID_EMPRESA)); return criterios.List<Financiamento>().ToList(); } catch (Exception e) { throw new Exception(e.ToString()); } } } } using Dominio.DataAccess; using Dominio.Domain; using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace Dominio.APL { public class AplFinanciamento { public void gravar(Financiamento financiamento) { FinanciamentoDAO.InserirOuAtualizar(financiamento); } public void deletar(Financiamento financiamento) { FinanciamentoDAO.Deletar(financiamento); } public List<Financiamento> listarTodas() { return FinanciamentoDAO.ListarTodos(); } public Financiamento buscarPorInscEstadual(string InscEstadual) { return FinanciamentoDAO.BuscarPorInscEstadual(InscEstadual); } public Financiamento buscarPorIDFinanciamento(int IDFinanciamento) { return FinanciamentoDAO.BuscarPorIDFinanciamento(IDFinanciamento); } public List<Financiamento> listarFinanciamentoPorEmpresa(int idEmpresa) { return FinanciamentoDAO.ListarPorEmpresa(idEmpresa); } } }  
      Esse é meu .cs porém não estou conseguindo fazer funcionar, porque me retorna tudo null ao compilar o código e desconfio que a minha lógica esteja errada.
       
      using Dominio.APL; using Dominio.Domain; using dap.Models; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; namespace dapView.Relatorios.RelFinancLiberadoMesBase { public partial class RelFinancLiberadoMesBase : System.Web.UI.Page { private AplFinanciamento aplFinanciamento = new AplFinanciamento(); private List<Financiamento> financiamento = new List<Financiamento>(); private static bool keyJS { get; set; } protected void Page_Load(object sender, EventArgs e) { keyJS = true; // CarregarComboLiberado(); if (!IsPostBack) { GerenciadorUsuarioPagina.funcao = "RELFIN01"; //btnImprime.Visible = false; } } //Carrega os dados relacionando o tipo de liberação por data //private void CarregarComboLiberado() // { // ddlLiberado.Items.Add("---------Selecione----------"); // ddlLiberado.Items.Add("Mês Base"); // ddlLiberado.Items.Add("Período"); // } protected void btnConsultar_Click(object sender, EventArgs e) { CarregaRelatorio(); } protected void ddlLiberado_SelectedIndexChanged(object sender, EventArgs e) { } public void CarregaRelatorio() { financiamento = aplFinanciamento.listarTodas(); var dados = (from financiamento in financiamento where DateTime.Compare(financiamento.DatUltimaLiberacao, Convert.ToDateTime(txtMesBase.Text.ToString())) == 0 group financiamento by new { financiamento.Codigo, financiamento.Empresa.InscEstadual, financiamento.Empresa.RazaoSocial, financiamento.Empresa.Cnpj, financiamento.Empresa.NomeAbreviado, financiamento.AnoMesBase } into g select new { codigo = g.Key.Codigo, AnoMesBase = g.Key.AnoMesBase, InscricaoEstadual = g.Key.InscEstadual, RazaoSocial = g.Key.RazaoSocial, Cnpj = g.Key.Cnpj, NmeAbreviado = g.Key.NomeAbreviado }).OrderBy(o => o.codigo).ToList(); if (dados.Count() > 0) { //Carrega os dados da gridview de consulta gv.DataSource = dados; gv.DataBind(); gv.UseAccessibleHeader = true; gv.HeaderRow.TableSection = TableRowSection.TableHeader; //Carrega os dados da gridview usada para imprimir gvImprimir.DataSource = dados; gvImprimir.DataBind(); gvImprimir.UseAccessibleHeader = true; gvImprimir.HeaderRow.TableSection = TableRowSection.TableHeader; //mostra botão imprimir //btnImprime.Visible = true; } else { if (keyJS) chamarSwal("aviso", "Não foram encontrados financiamentos para essa data."); // btnImprime.Visible = false; } } private void chamarSwal(string tipo, string mensagem) { var body = (HtmlGenericControl)(Page.Master.FindControl("body")); body.Attributes["onload"] = $"{tipo}(\"{mensagem}\")"; keyJS = false; } } } Esse é o meu html
       
      <%@ Page Title="" Language="C#" MasterPageFile="~/Content/MasterPage.Master" AutoEventWireup="true" CodeBehind="RelFinanciamento.aspx.cs" Inherits="dapView.Relatorios.RelFinancLiberadoMesBase.RelFinancLiberadoMesBase" %> <asp:Content ID="head" ContentPlaceHolderID="headPlaceHolder" runat="server"> <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.6.3/css/all.css"> <script src="../JsRelatorioFinancLiberadoMesBase.js"></script> <script> var d = "16/09/2019" // date received from card function filldate() { document.getElementById('cardexpirydate').value = d.split('/').reverse().join("-"); } </script> <script> function exibir_ocultar(val) { if (val.value == 'LiberadoMesBase') { document.getElementById('periodo').style.display = 'none'; document.getElementById('MesBase').style.display = 'block'; document.getElementById('periodo').style.display = 'none'; } else { document.getElementById('periodo').style.display = 'block'; document.getElementById('MesBase').style.display = 'none'; } }; </script> </asp:Content> <asp:Content ID="ContentForm" ContentPlaceHolderID="formPlaceHolder" runat="server"> <asp:ScriptManager runat="server"></asp:ScriptManager> <div class="row"> <div class="col-md-12"> <div class="content-box"> <div class="box-title">Financiamento</div> <div class="box-body"> <div id="triage"> <label for="category">Liberado:</label> <div class="form-inline"> <div class="col-md-2"> <label class="radio-inline control-label"> <input checked="checked" name="TaskLog.TaskTypeId" type="radio" value="2"> SIM </label> <label class="radio-inline control-label"> <input id="TaskLog_TaskTypeId" name="TaskLog.TaskTypeId" type="radio" value="1"> NÃO </label> </div> <div id="category-select"> <select onchange="exibir_ocultar(this)" class="col-md-3 form-control" id="category" name="category" style="width: auto"> <option value="LiberadoMesBase">-----------Selecione----------</option> <option value="LiberadoMesBase">Mês Base</option> <option value="LiberadoPeriodo">Período</option> </select> </div> </div> <br /> <div class="row"> <div class="form-group"> <label class="radio-inline control-label"> <input type="radio" name="optradio" checked>Sim</label> <label class="radio-inline"> <input type="radio" name="optradio">Não</label> </div> <br /> <div id="periodo"> <asp:TextBox type="Month" Style="width: 10%" runat="server" ClientIDMode="Static" class="form-control " ID="TextBox1" MaxLength="30"></asp:TextBox> <br /> </div> <br /> <div id="MesBase"> <asp:TextBox type="date" Style="width: 10%" runat="server" ClientIDMode="Static" class="form-control " ID="TextBox2" MaxLength="30"></asp:TextBox> <br /> </div> </div> </div> <div class="row"> <div class="content-box content-box-tabela" id="tabela" style="visibility: hidden"> <asp:GridView class="col-md-12" CssClass="tabela-padrao tabela-padrao-borda dataTable" runat="server" AutoGenerateColumns="False" PageSize="9" ID="gv" Width="100%"> <Columns> <asp:TemplateField HeaderText="Empresa" ItemStyle-HorizontalAlign="Left"> <ItemTemplate> <asp:Label ID="lblCodigo" runat="server" Text='<%# Bind("Codigo") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Valor Financiamento" ItemStyle-HorizontalAlign="Center"> <ItemTemplate> <asp:Label ID="lblValorFinanciamento" runat="server" Text='<%# Bind("ValorFinanciamento") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Inscricao Estadual" ItemStyle-HorizontalAlign="Center"> <ItemTemplate> <asp:Label ID="lblInscricaoEstadual" runat="server" Text='<%# Bind("InscricaoEstadual") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Ano mes base" ItemStyle-HorizontalAlign="Right"> <ItemTemplate> <asp:Label ID="lblAnoMesBase" runat="server" Text='<%# Bind("AnoMesBase") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> </Columns> <PagerStyle CssClass="" HorizontalAlign="Center" /> </asp:GridView> </div> </div> </div> <div class="box-footer"> <button runat="server" class="btn btn-padrao" id="btnConsultar" onserverclick="btnConsultar_Click">Consultar</button> </div> </div> <%--IMPRIMIR--%> <div class="container" style="visibility: hidden" id="ConteinerImprimir"> <div class="table" runat="server" style="margin: 0 auto; width: auto;"> <div class="row"> <div class="col-lg-12"> <img src="http://internet.sefaz.es.gov.br/imagens/topo_brasao.png" alt=""> <br> <br> </div> </div> <div class="row" runat="server" style="border-bottom: 2px solid #B0BEC5"> <div class="col-lg-5"> <strong>Financiamento</strong> </div> <div class="col-lg-5" style="text-align: end;" runat="server" id="totalRegistros"></div> </div> </div> <div class="row"> <div class="content-box content-box-tabela"> <asp:GridView class="col-md-12 grid" runat="server" AutoGenerateColumns="False" PageSize="9" ID="gvImprimir" GridLines="None" RowStyle-HorizontalAlign="Center" Width="100%"> <Columns> <asp:TemplateField HeaderText="Empresa" ItemStyle-HorizontalAlign="Left"> <ItemTemplate> <asp:Label ID="lblCodigo" runat="server" Text='<%# Bind("Codigo") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Valor Financiamento" ItemStyle-HorizontalAlign="Center"> <ItemTemplate> <asp:Label ID="lblValorFinanciamento" runat="server" Text='<%# Bind("ValorFinanciamento") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Inscricao Estadual" ItemStyle-HorizontalAlign="Center"> <ItemTemplate> <asp:Label ID="lblInscricaoEstadual" runat="server" Text='<%# Bind("InscricaoEstadual") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Ano mes base" ItemStyle-HorizontalAlign="Right"> <ItemTemplate> <asp:Label ID="lblAnoMesBase" runat="server" Text='<%# Bind("AnoMesBase") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> </Columns> <PagerStyle CssClass="" HorizontalAlign="Center" /> </asp:GridView> </div> </div> </div> </div> </div> </asp:Content>  
      Se alguém puder me ajudar, agradeço.
    • By Matth
      Um programa onde o usuário informa a idade de dois homens e duas mulheres, sendo que deve ser mostrado na tela a soma da idade do homem mais velho com a mulher mais nova e a multiplicação da idade da mulher mais velha com o homem mais novo!
    • By Michel Ol!ver
      Olá galera, estou com  um pequeno problema.. 
      gostaria de duplicar minha estrutura do report viewer dentro de um laço de repetição
       
       
      Tem possibilidade ?
       
      Exemplo do código abaixo : 
      ReportParameter[] parametros = { //cabecalho new ReportParameter("fazenda", ObjPropriedade.nome), new ReportParameter("lavoura", oArea.descricao + " (" + tamLavoura.ToString() + " Ha)"), new ReportParameter("cultura", ObjCiclo.Cultura.nome), new ReportParameter("resteva", resteva), new ReportParameter("dataPlantio", ObjCiclo.dataPlantio.Value.ToShortDateString()), new ReportParameter("dataColheita", ObjCiclo.dataColheita.Value.ToShortDateString()), new ReportParameter("unidade", ObjCiclo.Cultura.UnidadeMedida.nome), new ReportParameter("minima", ObjCiclo.prodMinima.ToString()), new ReportParameter("maxima", ObjCiclo.prodMaxima.ToString()), } reportAnalises.LocalReport.DataSources.Add(new ReportDataSource("dsCicloInter", lstRelCicloInter)); reportAnalises.LocalReport.DataSources.Add(new ReportDataSource("dsFertilizanteInter", lstRelFertilizanteInter)); reportAnalises.LocalReport.DataSources.Add(new ReportDataSource("dsMediaFertilizanteInter", lstMediaRelFertilizanteInter)); Tentei colocar um laço de repetição nessa estrutura, mas somente me apresenta um relatório. 
       
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.