none
Problema ao passar uma lista de usuario para outra na camada de apresentação RRS feed

  • Pergunta

  • Boa Tarde.

    Eu tenho um sistema em que na tela principal, exibe um avatar e o nome do usuário. Este programa é único por usuário, ou seja a minha tabela de usuarios nunca terá mais de um registro no banco de dados. Então caso o usuário não tenha cadastrado nenhuma imagem ou nome, eu quero exibir dados já pré-definidos. Ok, isto eu fiz. Mas o problema está em quando já existem dados no banco de dados. Vejam meu código.

    Método na Camada de Apresentação ao usuário (UI):

    public void DadosUsuario()
            {
                NegUsuario usuario = new NegUsuario();
                List<Usuario> usuarios = new List<Usuario>();
                usuarios = usuario.Consultausuario();
    
                if (usuarios.Count > 0)
                {
                    pbUsuario.Image = Image.FromFile(usuarios[4].ToString());
                    lbNomeusuario.Text = usuarios[1].ToString();
                }
                else
                {
                    pbUsuario.Image = Properties.Resources.user;
                    lbNomeusuario.Text = "Anônimo";
                }
            }


    E o método da camada de Negócios:

    public List<Usuario> Consultausuario()
            {
                ConsultaUsuario usuario = new ConsultaUsuario();
                DataTable dtUsuario = new DataTable();
                dtUsuario = usuario.Consultausuario();
    
                List<Usuario> usuarios = new List<Usuario>();
    
                foreach (DataRow row in dtUsuario.Rows)
                {
                    Usuario objUsuario = new Usuario();
                    objUsuario.Id = (int)row["id"];
                    objUsuario.Nome = (string)row["nome"];
                    objUsuario.Login = (string)row["login"];
                    objUsuario.Senha = (string)row["senha"];
                    objUsuario.Imagem = (string)row["imagem"];
                    usuarios.Add(objUsuario);
                }
    
                return usuarios;
            }


    Percebam que na camada de apresentação, eu estou passando a lista que vem da camada de negócios para uma lista que eu crio na camada de apresentação. Pensei que isso seria possível, mas me enganei, ou talvez exista mas não fiz da maneira correta. Sempre que eu testo o programa e tem algum usuário cadastrado no banco. Acontece este erro:  

    O índice estava fora do intervalo. Ele deve ser não-negativo e menor que o tamanho da coleção.
    Nome do parâmetro: index

    Na linha pbUsuario.Image = Image.FromFile(usuarios[4].ToString());

    fazendo alguns testes eu vi que  essa minha lista usuarios não é carregada. Alguém teria alguma solução?

    Obrigadão.

    quarta-feira, 17 de outubro de 2012 17:03

Todas as Respostas

  • Pessoal, desculpa, consegui resolver o problema debugando o código e percebi que a lista vinha correta. O que eu tinha que fazer era definir como se indice = 0 e ainda definir qual "parte" do objeto que gostaria de capturar. Ficando assim:

    pbUsuario.Image = Image.FromFile(usuarios[0].Imagem.ToString());
    
    lbNomeusuario.Text = usuarios[0].Nome.ToString();

    Valeu.

    quarta-feira, 17 de outubro de 2012 17:11