none
Lista de um objeto com um Ilist RRS feed

  • Pergunta

  • Bom dia pessoal.

    Segue mais uma dúvida para os universitários....rs

    Eu tenho o seguinte contexto de programação abaixo:

    protected void Page_Load(object sender, EventArgs e)
            {
                // lista de produtos que será atribuída as pendencias

                List<Produtos> produtosA = new List<Produtos>();

                produtosA.Add(new Produtos("1","0111", "AAAA", "1"));

                produtosA.Add(new Produtos("2", "0222", "BBBB", "1"));

                produtosA.Add(new Produtos("1", "0333", "CCCC", "1"));

                // Só para não falar que as pendencias tem os mesmos produtos

                List<Produtos> produtosB = new List<Produtos>();

                produtosB.Clear();

                produtosB.Add(new Produtos("1", "0221", "AAAA", "2"));

                produtosB.Add(new Produtos("3", "0121", "AEEAA", "2"));


                // lista de pendencias/tecnicos

                List<Tecnico> Tecnicos = new List<Tecnico>();

                Tecnicos.Add(new Tecnico("EMPRESA A", "APAR 21", "07/06/2019 11:00:00", "07/06/2019 11:00:00", "Clinica A", "Fabricio Vale","1", produtosA));

                Tecnicos.Add(new Tecnico("EMPRESA B", "APAR 22", "13/06/2019 11:00:00", "13/06/2019 11:00:00", "Clinica B", "Marcela","2", produtosB));


                PendenciasRepeater.DataSource = Tecnicos; // define o DataSource do repeater como a lista de objetos Tecnicos

                PendenciasRepeater.DataBind();

            }

    A chave primaria é o campo Cod OS.

    Agora vamos imaginar  se fosse para 500 linhas de Produtos. Como eu iria fazer o preenchimento dessas informações sem criar os 500 objetos...Será que alguém pode me dar uma ideia ou alguma Luz? Rs

    Segue a foto de como iria ficar


    Att

    Fabricio Vale


    Fabricio

    segunda-feira, 10 de junho de 2019 12:00

Respostas

  • Conseguir resolver da seguinte forma pessoal:

    Criei um Datatable

    Tecnicos = new DataTable();
                itens = new DataTable();
                //Cabeçalho
                Tecnicos.Columns.Add("Codos", typeof(string));
                Tecnicos.Columns.Add("Empficha", typeof(string));
                Tecnicos.Columns.Add("DataeHorainiOS", typeof(string));
                Tecnicos.Columns.Add("DataeHorafimOS", typeof(string));
                Tecnicos.Columns.Add("Clienteficha", typeof(string));
                Tecnicos.Columns.Add("Aparficha", typeof(string));
                Tecnicos.Columns.Add("Nome2pen", typeof(string));
                Tecnicos.Columns.Add("Numserie", typeof(string));
                //Itens
                //itens.Columns.Add("Codos", typeof(string));
                itens.Columns.Add("Idprodutopen", typeof(string));
                itens.Columns.Add("Produtopen", typeof(string));
                itens.Columns.Add("Qtdpen", typeof(string));

    No momento do Databound do Produtos eu preencho o meu Datatable de itens dessa forma:

                              

    protected void PendenciasRepeaterRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
            {
                // verifica se o item é do tipo ItemType ou AlternatingItem, se não for retorna e não continua o processamento
                if (e.Item.ItemType != ListItemType.Item && e.Item.ItemType != ListItemType.AlternatingItem) return;

                // verifica se o objeto ProdutoRepeater existe dentro do item
                if (e.Item.Controls.Contains((Repeater)e.Item.FindControl("ProdutosRepeater")))
                {
                    string codos = ((System.Data.DataRowView)e.Item.DataItem).Row.ItemArray[0].ToString();
                    objfichatelpendenciasDAO = new CadfichatelpendenciasDAO();
                    lista = null;
                    lista = objfichatelpendenciasDAO.Listar(" where f.Codospen='" + codos + "' order by f.Codospen ");
                    itens.Clear();
                    if (lista != null)
                    {
                        if (lista.Count > 0)
                        {
                            foreach (Cadfichatelpendencias item in lista)
                            {
                                itens.Rows.Add(item.Idprodutopen, item.NomProdpen, item.Qtdpen);
                            }
                        }
                        if (itens.Rows.Count > 0)
                        {
                            // cria um objeto Repeater e define-o como o objeto ProdutoRepeater do item
                            Repeater ProdutosRepeater = (Repeater)e.Item.FindControl("ProdutosRepeater");
                            // converte o item (linha do repeater) para um Tecnico e define a propriedade Produtos como DataSource do repeater
                            ProdutosRepeater.DataSource = itens;
                            ProdutosRepeater.DataBind();
                        }

                    }
                }

            }

    Pronto questão resolvida...Rs

    Obrigado pessoal


    Fabricio

    • Marcado como Resposta Fabriciovale quinta-feira, 13 de junho de 2019 18:24
    • Não Marcado como Resposta Fabriciovale quinta-feira, 13 de junho de 2019 18:24
    • Marcado como Resposta Fabriciovale quinta-feira, 13 de junho de 2019 18:24
    quinta-feira, 13 de junho de 2019 18:24

Todas as Respostas

  • Fabricio Vale,

        Pelo que eu entendi, você pode criar filtros, restrições.

        Seguem minhas ideias:

        1 - Você fez uma restrição por usuário, pode criar uma restrição por período de tempo. Exemplo: Somente 1 mês por vez ou  1 semana por vez...
        2 - Outra forma seria paginar a exibição mostrando apenas um número X máximo de registro por vez, se usuário quiser avançar para página seguinte seriam recarregados somente o número máximo de X objetos.

    []'s,
    Fabio I.

    segunda-feira, 10 de junho de 2019 12:09
  • bom dia Fabio.

    Criar o filtro não é um dos maiores problemas. Minha dúvida seria como preencher essa lista de 30 ou 40  ou 500 produtos nesse modelo de programação acima, sem ter que utilizar vários objetos ao mesmo tempo. Entendeu. Isso é possível?


    Fabricio


    • Editado Fabriciovale segunda-feira, 10 de junho de 2019 13:31
    segunda-feira, 10 de junho de 2019 13:30
  • Olá, Fabricio!

    Na verdade você precisará utilizar objetos sim, mas pode automatizar a tarefa com algum laço como o for, while, etc. 

    Você irá ler os dados de algum banco ou está inventando mesmo?


    “First do it, then do it right, then do it better.”

    segunda-feira, 10 de junho de 2019 13:46

  • Irei utilizar isso lendo de um Banco de dados, mas pode utilizar os dados fictícios citados acima tb.

    O detalhe é que eu não sei como utilizar isso fazendo o FOR ou While. Você saberia me dizer? Essa é a minha dúvida?

    Att

    Fabricio Vale


    Fabricio

    segunda-feira, 10 de junho de 2019 14:03
  • Você pode fazer assim:

    List<Produto> produtosA = new List<Produto>();
    for (int i=1; i <= 30; i++)
    {
        produtosA.Add(new Produto(i.ToString(), "A" + i, i.ToString(), i.ToString()));
    }

    Com esse laço criamos 30 produtos. Você pode alterar o limite para quanto desejar.

    Att, Wallace


    “First do it, then do it right, then do it better.”

    segunda-feira, 10 de junho de 2019 14:24
  • Preencher o objeto é facil. Popular os objetos separados que eu não sei.

    Exemplo:

    List<Produto> produtosA = new List<Produto>(); for (int i=1; i <= 30; i++) {

    if (Codos==1){ lista[x] = produtosA.Add(new Produto(i.ToString(), "A" + i, i.ToString(), i.ToString()));

    }

    if (Codos==2){ lista[x] = produtosA.Add(new Produto(i.ToString(), "B" + i, i.ToString(), i.ToString()));

    }

    }

    e depois terá outro for para correr essa lista acima preenchendo esse item abaixo

    for (int i=1; i <= 30; i++) {

    Tecnicos.Add();///Ai iria preencher os tecnicos com os produtos.

    }

    Preencher os campos não é o problema e sim correr os objetos produtos e preencher eles nos tecnicos e depois popular....entendeu 


    Fabricio

    segunda-feira, 10 de junho de 2019 14:41
  • Qual a relação entre o técnico e o produto? O campo "CodOs" exprime essa relação? Percebi que todos os produtos de um técnico tem o mesmo CodOs

    “First do it, then do it right, then do it better.”


    segunda-feira, 10 de junho de 2019 15:25
  • Sim. O Codos é chave primaria da tabela (Tecnico) e a relação entre as tabelas (Tecnico e produtos)

    Fabricio

    segunda-feira, 10 de junho de 2019 16:25
  • Segue um exemplo de um cenário bem básico. 

    Chave principal entre as relações entre as tabelas é o campo Codos

    Tabela - Tecnico

    Codos | Empresa      | Aparelho |Data/Hora Ini |Data/Hora Fim| Cliente    | Funcionário

       1     | EmpresaA    | KF 90     | 17/09/2019   | 18/09/2019   | Google    | Fabricio Vale

       2     | EmpresaB    | AA 90     | 14/09/2019   | 15/09/2019   | Google    | Marcela

    Tabela - Produtos

    Codos | idproduto  |  produto  |   Quantidade  

       1     | 11            | Panela     |        3

       1     | 14            | Fogão      |        2

       1     | 12            | Mesa       |        3

       1     | 13            | Bolsa       |        2

       1     | 16            | Janela      |        3

       1     | 17            | Mouse      |        2

       2     | 33            | Carro      |        2

       2     | 11            | Panela     |        3

       2     | 14            | Fogão      |        2

       2     | 12            | Mesa       |        3

       2     | 13            | Bolsa       |        2

       2     | 16            | Janela      |        3

       2     | 17            | Mouse      |        2


    Fabricio

    segunda-feira, 10 de junho de 2019 16:38
  • Você irá exibir os dados para o funcionário escolhido na Combo Box, certo? O usuário escolhe o Funcionário e em seguida a aplicação busca os dados dele e dos produtos por ele vendidos?



    “First do it, then do it right, then do it better.”

    quarta-feira, 12 de junho de 2019 14:08
  • Conseguir resolver da seguinte forma pessoal:

    Criei um Datatable

    Tecnicos = new DataTable();
                itens = new DataTable();
                //Cabeçalho
                Tecnicos.Columns.Add("Codos", typeof(string));
                Tecnicos.Columns.Add("Empficha", typeof(string));
                Tecnicos.Columns.Add("DataeHorainiOS", typeof(string));
                Tecnicos.Columns.Add("DataeHorafimOS", typeof(string));
                Tecnicos.Columns.Add("Clienteficha", typeof(string));
                Tecnicos.Columns.Add("Aparficha", typeof(string));
                Tecnicos.Columns.Add("Nome2pen", typeof(string));
                Tecnicos.Columns.Add("Numserie", typeof(string));
                //Itens
                //itens.Columns.Add("Codos", typeof(string));
                itens.Columns.Add("Idprodutopen", typeof(string));
                itens.Columns.Add("Produtopen", typeof(string));
                itens.Columns.Add("Qtdpen", typeof(string));

    No momento do Databound do Produtos eu preencho o meu Datatable de itens dessa forma:

                              

    protected void PendenciasRepeaterRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
            {
                // verifica se o item é do tipo ItemType ou AlternatingItem, se não for retorna e não continua o processamento
                if (e.Item.ItemType != ListItemType.Item && e.Item.ItemType != ListItemType.AlternatingItem) return;

                // verifica se o objeto ProdutoRepeater existe dentro do item
                if (e.Item.Controls.Contains((Repeater)e.Item.FindControl("ProdutosRepeater")))
                {
                    string codos = ((System.Data.DataRowView)e.Item.DataItem).Row.ItemArray[0].ToString();
                    objfichatelpendenciasDAO = new CadfichatelpendenciasDAO();
                    lista = null;
                    lista = objfichatelpendenciasDAO.Listar(" where f.Codospen='" + codos + "' order by f.Codospen ");
                    itens.Clear();
                    if (lista != null)
                    {
                        if (lista.Count > 0)
                        {
                            foreach (Cadfichatelpendencias item in lista)
                            {
                                itens.Rows.Add(item.Idprodutopen, item.NomProdpen, item.Qtdpen);
                            }
                        }
                        if (itens.Rows.Count > 0)
                        {
                            // cria um objeto Repeater e define-o como o objeto ProdutoRepeater do item
                            Repeater ProdutosRepeater = (Repeater)e.Item.FindControl("ProdutosRepeater");
                            // converte o item (linha do repeater) para um Tecnico e define a propriedade Produtos como DataSource do repeater
                            ProdutosRepeater.DataSource = itens;
                            ProdutosRepeater.DataBind();
                        }

                    }
                }

            }

    Pronto questão resolvida...Rs

    Obrigado pessoal


    Fabricio

    • Marcado como Resposta Fabriciovale quinta-feira, 13 de junho de 2019 18:24
    • Não Marcado como Resposta Fabriciovale quinta-feira, 13 de junho de 2019 18:24
    • Marcado como Resposta Fabriciovale quinta-feira, 13 de junho de 2019 18:24
    quinta-feira, 13 de junho de 2019 18:24