none
View exibindo o mesmo dado do list diversas vezes. RRS feed

  • Pergunta

  • Olá pessoal, boa noite.

    Então, meu problema é o seguinte:

    Criei um view index tipada como list do meu model, no meu controlador eu chamo o método responsável pela consulta ao banco de dados no get da minha view, o prolema é que a lista retorna só aparece os dados da minha última linha do banco.

    A minha tabela do banco chama se tbMaterial, se eu tiver 10 materiais cadastrados lá a minha view vai exibir uma lista com 10 vezes as informações da última linha do banco (sempre exibe as informações do último material inserido). Eu acabei de criar um CRUD para fornecedor e não tive muitos problemas, meu crud de material está sendo desenvolvido exatamente igual ao meu crud de fornecedor mas agora tive esse problema e não encontro uma solução.

    Segue a baixo minha stored Procedure, método da minha BLL para buscar as informações vindas do Banco e o meu controloador:

    <----------------------------- Procedure ------------------------->

    ALTER Procedure [dbo].[BuscaMaterial]
    as
    Begin
    Select 
    Id, Nome, Descricao, QuantidadeAtual, QuantidadeMinima, Valor, DataCompra, IdFornecedor, Ativo
     FROM tbMaterial
    Where Ativo = 1
    End

    <---------------------->

    <--------------------Método de busca----------------->

     public IEnumerable<Material> BuscaMaterial()
            {
                string connectionString = ConfigurationManager.ConnectionStrings["Cs1"].ConnectionString;

                List<Material> materiais = new List<Material>();

                try
                {
                    using (SqlConnection con = new SqlConnection(connectionString))
                    {
                        SqlCommand cmd = new SqlCommand("BuscaMaterial", con);
                        cmd.CommandType = CommandType.StoredProcedure;
                        con.Open();
                        SqlDataReader rdr = cmd.ExecuteReader();
                        while (rdr.Read())
                        {
                            material.Id = Convert.ToInt32(rdr["Id"]);
                            material.Nome = rdr["Nome"].ToString();
                            material.Descricao = rdr["Descricao"].ToString();
                            material.QuantidadeAtual = Convert.ToDouble(rdr["QuantidadeAtual"]);
                            material.QuantidadeMinima = Convert.ToDouble(rdr["QuantidadeMinima"]);
                            material.Valor = Convert.ToDouble(rdr["Valor"]);
                            material.DataCompra = Convert.ToDateTime(rdr["DataCompra"]);
                            material.IdFornecedor = Convert.ToInt32(rdr["IdFornecedor"]);
                            material.Ativo = Convert.ToString(rdr["Ativo"]);
                            materiais.Add(material);
                        }
                    }
                    return materiais;
                }
                catch
                {
                    throw;
                }

    <---------------------------------------------------->

    <-------------------controller get da minha view ------------->

    public ActionResult Index(string Pesquisa)
            {
                if (Pesquisa == null)
                {                
                    List<Material> materiais = materialBll.BuscaMaterial().ToList();
                    return View(materiais);
                }
                else
                {
                    List<Material> materiais = materialBll.BuscaMaterialporNome(Pesquisa).ToList();
                    return View(materiais);
                }
            }

    <-------------------------------------------->

    Obs: não coloquei minha view aqui pois não fiz alteração alguma n que já vem padrão, apenas criar o textbox "pesquisa" e o botão "pesquisar" que faz uma requisição get.

    terça-feira, 28 de março de 2017 02:35

Todas as Respostas

  • Olá, Richard!

       Aplica esta modificação no seu código:

    <--------------------Método de busca----------------->
    
     public IEnumerable<Material> BuscaMaterial()
            {
                string connectionString = ConfigurationManager.ConnectionStrings["Cs1"].ConnectionString;
    
                List<Material> materiais = new List<Material>();
    
                try
                {
                    using (SqlConnection con = new SqlConnection(connectionString))
                    {
                        SqlCommand cmd = new SqlCommand("BuscaMaterial", con);
                        cmd.CommandType = CommandType.StoredProcedure;
                        con.Open();
                        SqlDataReader rdr = cmd.ExecuteReader();
                        while (rdr.Read())
                        {
    			material = new Material(); //Crie uma nova instância do objeto Material para cada item
                            material.Id = Convert.ToInt32(rdr["Id"]);
                            material.Nome = rdr["Nome"].ToString();
                            material.Descricao = rdr["Descricao"].ToString();
                            material.QuantidadeAtual = Convert.ToDouble(rdr["QuantidadeAtual"]);
                            material.QuantidadeMinima = Convert.ToDouble(rdr["QuantidadeMinima"]);
                            material.Valor = Convert.ToDouble(rdr["Valor"]);
                            material.DataCompra = Convert.ToDateTime(rdr["DataCompra"]);
                            material.IdFornecedor = Convert.ToInt32(rdr["IdFornecedor"]);
                            material.Ativo = Convert.ToString(rdr["Ativo"]);
                            materiais.Add(material);
                        }
                    }
                    return materiais;
                }
                catch
                {
                    throw;
                }
    <---------------------------------------------------->

    Da forma atual, você está apenas alterando a mesma instância várias vezes, e adicionando na coleção. Como a instância é a mesma em todos os itens, quando você altera um, todos os itens são atualizados.

    Bom trabalho.


    • Editado Rodrigo CdS terça-feira, 28 de março de 2017 10:25
    terça-feira, 28 de março de 2017 10:24