Ir para conteúdo
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

Editado por Gabriel Heming
remover o quote

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

Editado por Gabriel Heming
remover o quote

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
    }

 

Editado por Gabriel Heming
remover o quote e corrigir formatação

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

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por prflima
      Boa noite,
       
      É meu primeiro post e se eu estiver postando em área me perdoem.
      Essa semana comprei um livro para aprender Linguagem C#, o livro é "Use a cabeça C#". Uso um sistema operacional Linux e o livro faz os exercícios e toda as outras coisas usando o Visual Studio 2010, .net 4.0!
      Virtualizei uma maquina windows 10 e instalei o .net, quando comecei a fazer a primeira atividade do livro, que é, um projetinho que armezena contatos com banco de dados e uma interface, perdoem-me por não saber relatar com tamanha precisão, pois só tenho 2 meses estudando programação, conclui somente o curso de lógica e estou iniciando em C# e MySQL.
       
      Enfim, no livro pede pra eu adicionar um Item ao meu projeto, tal item que simule um banco de dados, pelo que entendi. Porém quando eu vou procurar no Visual Studio na mesma parte que descreve no livro, aparece que não tenho tal extensão ou arquivo. Ja baixei a extensão do SQL completa e não funcionou, enfim, peço que me ajudem, pois estava um tanto empolgado para aprender e ainda continuo, porém estou a tarde toda travado nisso e nada.
       
      Outro ponto, o que posso buscar de materiais e dicas para melhorar meu aprendizado com programação. Pois estou bastante animado e sinto prazer em escrever códigos, mas como estudo por conta própria o começo é meio complicado, pois fico sem norte (metafora ruim, desculpe)
       
      Segue abaixo a Imagem do livro e do meu desktop.
       
      Agradeço de coração todas as respostas e mais uma vez perdoem-me caso tenha alguma besteira descrita.


    • Por Amanda Morales
      Boa tarde pessoal,
      bom eu tenho um software que em um form realiza o cadastro do usuário e em outro realiza o login porem quando utilizo os dados do cadastro para login o count sempre retorna com 0. 
      private void btnEntrar_Click(object sender, EventArgs e) { OleDbConnection Conn; OleDbCommand Cmd; /* * String de conexão para conectar com o acess: * cmo encontrar string: * 1° tolls * 2° connection database Provider=Microsoft.Jet.OLEDB.4.0;Data Source=J:\porta\etec\3° Ano\Técnico\PC\BancodeDados1.mdb */ String StrConn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=H:\porta\1\etec\3° Ano\Técnico\PC\Aula 3 Login\AulaLogin.mdb"; //inicializar a conexão Conn = new OleDbConnection(StrConn); //abrir conexão Conn.Open(); String SQL = "Select count(*) From usuarios " + " Where Login Like '" + txtLogin.Text + "' and " + " Senha = '" + txtSenha.Text + "' "; Cmd = new OleDbCommand(SQL, Conn); //retorna o resultado do select count int resul = (int) Cmd.ExecuteScalar(); if (resul == 1) { //sem chaves pois possui apenas um comandi Form1 tela = new Form1(); tela.ShowDialog(); } else { MessageBox.Show("Login invalido"); txtLogin.Clear(); txtSenha.Clear(); } }  
    • Por rtavix
      Recebi o seguinte erro:
       
      Nunca vi isso igual, como resolvo isso?
       
      nullreferenceexception was unhandled by user code
       
      Meus códigos de acordo com o erro da mensagem:
      [NullReferenceException: Referência de objeto não definida para uma instância de um objeto.] SDPJDominio.DataAccess.ProcessoInteressadoDAO.InserirOuAtualizar(ProcessoInteressado tipoDoc) in D:\Repositório SVN\SDP\SDPJ\branches\SDPJ-V3.1.0\SDPJ-102\SDPJDominio\DataAccess\ProcessoInteressadoDAO.cs:41 SDPJDominio.APL.AplProcessoInteressado.salvar(ProcessoInteressado processoInteressado) in D:\Repositório SVN\SDP\SDPJ\branches\SDPJ-V3.1.0\SDPJ-102\SDPJDominio\APL\AplProcessoInteressado.cs:15 SDPJView.ImportacaoProcessoView.ImportacaoProcesso.importar_Click(Object sender, EventArgs e) in D:\Repositório SVN\SDP\SDPJ\branches\SDPJ-V3.1.0\SDPJ-102\SDPJView\ImportacaoProcessoView\ImportacaoProcesso.aspx.cs:158 System.Web.UI.WebControls.Button.OnClick(EventArgs e) +9669714 System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +108 System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +12 System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +15 System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +35 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3562 public static void InserirOuAtualizar(ProcessoInteressado tipoDoc) { ISession sessao = NhibernateHelper.SessaoCorrente; ITransaction transacao = sessao.BeginTransaction();// O erro cai aqui nessa linha 41 try { sessao.Clear(); sessao.SaveOrUpdate(tipoDoc); transacao.Commit(); } catch (Exception e) { transacao.Rollback(); throw new Exception(e.ToString()); } }  
      public void salvar(ProcessoInteressado processoInteressado) { ProcessoInteressadoDAO.InserirOuAtualizar(processoInteressado);// Aqui é linha 15 }  
      if (listaGravarProcInter.Count != 0) { foreach (ProcessoInteressado item in listaGravarProcInter) { aplProcessoInteressado.salvar(item);// linha 158 } }  
    • Por rtavix
      Preciso da ajuda dos amigos dos fóruns em uma seguinte situação, na minha planilha possuo os seguintes nomes:
       
      Simone Martins Teixeira - Linha 6
      Jéssica Leal Silveira Marchiori Mantuan- Linha 7 
      Eduardo Gripp Jabôr- Linha 8 
      Mayllon Vinicius Bitencourt- Linha 9
      Regina de Castro Borges Abreu- Linha 10
      Douglas de Sousa Rodrigues- Linha 11
      Douglas de Sousa Rodrigues- Linha 12 
      Evaristo Almeida da Silva- Linha 13
       
      Porém somente é exibido no meu log:
      Log de Importação:   O interessado SIMONE MARTINS TEIXEIRA, informado na linha 6 foi adicionado novamente ao processo 0000112-75.2016.8.08.0012 
      O interessado REGINA DE CASTRO BORGES ABREU, informado na linha 10 foi adicionado novamente ao processo 0000051-63.2017.8.08.0051 
       
      Os demais logs não aparece. Ao compilar o meu código, verifiquei que os demais interessados não passa nessa linha:
      log.Append("O interessado " + processo.Interessado.Nome + ", informado na linha " + (linha["indice"]) + " foi adicionado novamente ao processo " + processo.NumProcessoJudicial + " <br>"); Somente a Simone e Regina que cai dentro do log.
       
      Essa é a parte do meu código que acontece isso:
      foreach (var linha in (IEnumerable<DataRow>)dados) { i++; List<Processo> listaProcessoExistente = new List<Processo>(); Processo processo = null; 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 " + (linha["indice"]) + " 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(); } } //Aqui é onde eu salvo if (listaGravarProcInter.Count != 0) { foreach (ProcessoInteressado item in listaGravarProcInter) { aplProcessoInteressado.salvar(item); } } //Método que eu uso para verificação Preliminar private void VerificacaoPreliminar(IEnumerable<DataRow> dados) { int i = 4; bool importado = false; foreach (var linha in dados) { i++; //Verifica se nenhuma planilha com o numSEP informado já não foi importada if (!linha.ItemArray[17].ToString().Equals("")) { if (aplProcessoInteressado.listaProcInterPorCodSep(decimal.Parse(linha.ItemArray[17].ToString())).Count != 0) { importado = true; break; } } else { log.Append("A célula S referente a linha " + (linha["indice"]) + " deve ser preenchida. <br>"); arquivoInvalidado = true; } } } //Método onde eu valido a duplicidade do interessado. public void ValidaDuplicidadeInteressado() { if (listaInteressadoArq.Count != 0) { List<Interessado> listaInterAux = new List<Interessado>(); List<Processo> listaProc = new List<Processo>(); List<ProcessoInteressado> listaProcInter = new List<ProcessoInteressado>(); List<Interessado> listaTodosInteressados = aplInteressado.listaTodos(); String logAlteracaoInter = String.Empty; foreach (var inter in listaInteressadoArq) { if (listaTodosInteressados.Exists(i => i.CPF_CNPJ == inter.CPF_CNPJ || i.Nome.Contains(inter.Nome))) { listaInterAux = listaTodosInteressados.FindAll(i => i.CPF_CNPJ == inter.CPF_CNPJ || i.Nome.Contains(inter.Nome)); if (listaInterAux.Count > 1) { //Atualização de interessado duplicado e alterações necessárias para o caso logAlteracaoInter = "Importação - Alteração do Interessado, Nome: " + listaInterAux.First().Nome + ", CPF/CNPJ: " + listaInterAux.First().CPF_CNPJ + ", Endereço: " + listaInterAux.First().Endereco + ", nº: " + listaInterAux.First().Numero + ", Cep: " + listaInterAux.First().Cep + ", Bairro: " + (listaInterAux.First().Bairro != null ? listaInterAux.First().Bairro.Descricao : String.Empty) + ", Municipio: " + (listaInterAux.First().Municipio != null ? listaInterAux.First().Municipio.Nome : String.Empty) + ", Complemento: " + listaInterAux.First().Complemento + ".'\n'" + "Para '\n'"; Interessado interessado = new Interessado(); interessado = listaInterAux.First(); interessado.Bairro = inter.Bairro; interessado.Cep = inter.Cep; interessado.Complemento = inter.Complemento; interessado.CPF_CNPJ = inter.CPF_CNPJ; interessado.Endereco = inter.Endereco; interessado.Municipio = inter.Municipio; interessado.Nome = inter.Nome; interessado.Numero = inter.Numero; listaInterAux.Remove(listaInterAux.First()); aplInteressado.gravar(interessado); logAlteracaoInter += "Nome: " + interessado.Nome + ", CPF/CNPJ: " + interessado.CPF_CNPJ + ", Endereço: " + interessado.Endereco + ", nº: " + interessado.Numero + ", Cep: " + interessado.Cep + ", Bairro: " + (interessado.Bairro != null ? interessado.Bairro.Descricao : String.Empty) + ", Municipio: " + (interessado.Municipio != null ? interessado.Municipio.Nome : String.Empty) + ", Complemento: " + interessado.Complemento + "."; listaLogsAuditoria.Add(logAlteracaoInter); listaProc = aplProcesso.consultaPorInteressado(interessado); foreach (var item in listaProc) { item.Interessado = interessado; aplProcesso.gravar(item); listaLogsAuditoria.Add("Importação - Alteração do processo de número judicial " + item.NumProcessoJudicial + ". Alterado Interessado por motivo de duplicidade de CPF/CNPJ."); } listaProcInter = aplProcessoInteressado.listaProcInterPorInteressado(interessado);// aplProcessoInteressado.listaProcInterPorCpf(inter.CPF); foreach (var item in listaProcInter) { item.Interessado = interessado; aplProcessoInteressado.salvar(item); listaLogsAuditoria.Add("Importação - Alteração do processo/interessado código: " + item.Codigo + ", pertencente ao Processo: " + item.Processo.NumProcessoJudicial + ". Alterado Interessado por motivo de duplicidade de CPF/CNPJ."); } while (listaInterAux.Count != 0) { try { listaLogsAuditoria.Add("Importação - Exclusão do Interessado: " + listaInterAux.First().Nome + " - " + listaInterAux.First().CPF_CNPJ + ". Por motivo de duplicidade de CPF/CNPJ."); Interessado interessadoDel = listaInterAux.First(); listaInterAux.Remove(interessadoDel); aplInteressado.deletar(interessadoDel); } catch (Exception erro) { ExibirMessageBoxException(erro.Message); } } } else { //Atualização de interessado existente Interessado interessado = new Interessado(); interessado = listaInterAux.First(); if (!this.InteressadoIgual(interessado, inter)) { logAlteracaoInter = "Importação - Alteração do Interessado, Nome: " + listaInterAux.First().Nome + ", CPF/CNPJ: " + listaInterAux.First().CPF_CNPJ + ", Endereço: " + listaInterAux.First().Endereco + ", nº: " + listaInterAux.First().Numero + ", Cep: " + listaInterAux.First().Cep + ", Bairro: " + (listaInterAux.First().Bairro != null ? listaInterAux.First().Bairro.Descricao : String.Empty) + ", Municipio: " + (listaInterAux.First().Municipio != null ? listaInterAux.First().Municipio.Nome : String.Empty) + ", Complemento: " + listaInterAux.First().Complemento + ".'\n'" + "Para '\n'"; aplInteressado.gravar(interessado); logAlteracaoInter += "Nome: " + interessado.Nome + ", CPF/CNPJ: " + interessado.CPF_CNPJ + ", Endereço: " + interessado.Endereco + ", nº: " + interessado.Numero + ", Cep: " + interessado.Cep + ", Bairro: " + (interessado.Bairro != null ? interessado.Bairro.Descricao : String.Empty) + ", Municipio: " + (interessado.Municipio != null ? interessado.Municipio.Nome : String.Empty) + ", Complemento: " + interessado.Complemento + "."; listaLogsAuditoria.Add(logAlteracaoInter); } } } else { //Novo interessado aplInteressado.gravar(inter); logAlteracaoInter = "Importação - Cadastro do Interessado, Nome: " + inter.Nome + ", CPF/CNPJ: " + inter.CPF_CNPJ + ", Endereço: " + inter.Endereco + ", nº: " + inter.Numero + ", Cep: " + inter.Cep + ", Bairro: " + (inter.Bairro != null ? inter.Bairro.Descricao : String.Empty) + ", Municipio: " + (inter.Municipio != null ? inter.Municipio.Nome : String.Empty) + ", Complemento: " + inter.Complemento + "."; listaLogsAuditoria.Add(logAlteracaoInter); } }//fim Foreach } } Me ajudem por gentileza.
×

Informação importante

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