none
Trabalhando com lista em class RRS feed

  • Pergunta

  • Olá, 

    Tenho o seguinte code no Form1.cs:

    for (int i = 1; i <= NC; i++)
    {
        Tipo[] lista = new Tipo[]
        {
            new Tipo("A"),
            new Tipo("B"),
            //e + N Tipo
        }
        //outra parte do program!
        ComboBox cb = ComboBox();
        cb.DisplayMember = "Tipo";
        //outra parte do program!
    }

    Gostaria de, no lugar de preencher a lista no form1 preencher ela diretamente na Class Tipo uma vez que ela será fixa.

    Além disso, preciso que os items dessa lista apareçam em uma combobox. Como fazer isso?


    quinta-feira, 1 de fevereiro de 2018 11:25

Respostas

  • Jonh Kalak,

       Okay, vamos fazer os seguinte. Veja se você acha que fica legal.

       Separamos em:

       1 - Modelo (model) que é a estrutura da classe;

       2 - BLL (business) que são as regras de negócio;

       3 - Form (user interface) é o próprio formulário;

    -----------------------------------

    1 - MODEL (CLASSE - TipoModel.cs)

    namespace wfaComboBox
    {
         public class TipoModel
        {
            #region "Atributos"
            private string _tipoModel;
            #endregion
    
            #region "Construtores"
    
            /// <summary>
            /// Construtor da Classe VAZIO
            /// </summary>
            public TipoModel()
            {
            }
    
            /// <summary>
            /// Construtor da Classe
            /// </summary>
            /// <param name="_t">Parâmetro passado</param>
            public TipoModel(string _t) : base()
            {
                this._TipoModel = _t;
            }
            #endregion
    
            #region "Propriedades"
            /// <summary>
            /// Propriedade da Classe
            /// </summary>
            public string _TipoModel
            {
                get { return _tipoModel; }
                set { _tipoModel = value; }
            }
            #endregion
    
        }
    }

    2 - BLL (CLASSE - TipoBLL.cs)

    using System.Collections.Generic;
    
    namespace wfaComboBox
    {
        public class TipoBLL
        {
            #region "Atributos"
            public List<TipoModel> lista;
            #endregion
    
            #region "Construtores"
            public TipoBLL()
            {
    
            }
            #endregion
    
            #region "Metodos"
            public List<TipoModel> SelecionarTodos()
            {
                lista = new List<TipoModel>
                {
                    new TipoModel("A"),
                    new TipoModel("B"),
                    new TipoModel("C")
                };
    
                return lista;
            }
            #endregion
        }
    }

    3 - FORM (frmComboBox.cs)

    using System.Windows.Forms;
    
    namespace wfaComboBox
    {
        public partial class frmComboBox : Form
        {
            TipoModel clsTipoModel = new TipoModel();
            TipoBLL clsTipoBLL = new TipoBLL();
    
            public frmComboBox()
            {
                InitializeComponent();
                PreencheCombo();
            }
    
            /// <summary>
            /// Recebe a lista já separada e preenche a ComboBox
            /// </summary>
            public void PreencheCombo()
            {
                clsTipoBLL.SelecionarTodos();
    
                foreach (TipoModel item in clsTipoBLL.lista)
                {
                    this.cboTipoModel.Items.Add(item._TipoModel);
                }
            }
        }
    }

       Seria isso? A lista está em BLL...

    []'s,
    Fabio I.




    • Sugerido como Resposta Fabio I quinta-feira, 1 de fevereiro de 2018 13:49
    • Marcado como Resposta Jonh Kalak quinta-feira, 1 de fevereiro de 2018 13:50
    • Editado Fabio I quinta-feira, 1 de fevereiro de 2018 13:51
    quinta-feira, 1 de fevereiro de 2018 13:28

Todas as Respostas

  • Popula a lista no construtor da Classe do form. Ou criar uma classe pra lista.

    quinta-feira, 1 de fevereiro de 2018 11:58
  • Jonh Kalak,

       Seria o código abaixo?

    using System.Windows.Forms;
    
    namespace wfaComboBox
    {
        public partial class frmComboBox : Form
        {
            int NC = 3;
            Tipo[] lista;
    
            public frmComboBox()
            {
                InitializeComponent();
                TESTE();
                PreencheCombo();
            }
    
    
            void TESTE()
            {
                for (int i = 1; i <= NC; i++)
                {
                    lista = new Tipo[]
                    {
                        new Tipo("A"),
                        new Tipo("B"),
                        //e + N Tipo
                    };
                }
    
    
                ////outra parte do program!
                //ComboBox cb = ComboBox();
                //            cb.DisplayMember = "Tipo";
                //            //outra parte do program!
            }
            void PreencheCombo()
            {
                foreach (Tipo item in lista)
                {
                    cboTipo.Items.Add(item._Tipo);
                }
            }
        }
    }

        E a CLASSE tipo:

    namespace wfaComboBox
    {
         public class Tipo
        {
            /// <summary>
            /// CONSTRUTOR DA CLASSE
            /// </summary>
            /// <param name="_t">Parâmetro passado</param>
            public Tipo(string _t)
            {
                _tipo = _t;
            }
    
    
            private string _tipo;
    
            /// <summary>
            /// PROPRIEDADE DA CLASSE
            /// </summary>
            public string _Tipo
            {
                get { return _tipo; }
                set { _tipo = value; }
            }
        }
    }

    []'s,

    Fabio I.


    • Editado Fabio I quinta-feira, 1 de fevereiro de 2018 12:08
    quinta-feira, 1 de fevereiro de 2018 12:03
  • Sugiro desta forma:

    public class Form1
    {
      public void Form1_Load(....)
      {
        ClasseDados dados = new ClasseDados();
    
        combo.DataSource = dados.RetornaLista();
        combo.DisplayMember = "Descricao";
        combo.DataBind()
      }
    
      class ClasseDados
      {
        public void RetornaLista()
        {
          return new Tipo[]
          {
            new Tipo("A"),
            new Tipo("B")
          };
    
        }
      }
    
      class Tipo
      {
        public String Descricao {get;set;}
        public Tipo(String descricao)
        {
          this.Descricao = descricao;
        }
      }
    }


    Juliano Nunes - http://linkedin.com/in/julianonunes

    Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.

    Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.

    quinta-feira, 1 de fevereiro de 2018 12:11
  • Então Fabio, acabei me expressando mal...

    Como são muitos itens na minha lista gostaria de chamar ela de um outro "arquivo".cs, quero tirar essa lista/class do Form1.

    Eu até criei um arquivo class de nome Tipo.cs parecido com o da Classe Tipo que você colocou e tentei preencher direto nele, mas não deu certo o que fiz.

    quinta-feira, 1 de fevereiro de 2018 12:36
  • Também serve, mas a lista continua dentro do Form1. Seria bom tirar a Lista Tipo do Form1, por ela em um outro .cs e chama-la de lá!
    • Editado Jonh Kalak quinta-feira, 1 de fevereiro de 2018 12:40
    quinta-feira, 1 de fevereiro de 2018 12:40
  • Eu tenho um arquivo chamado Tipo.cs que é a classe na qual a lista é trabalhada, mas continuo populando a lista dentro do Form1 e a minha intenção é fazer isso fora do Form1.
    quinta-feira, 1 de fevereiro de 2018 12:43
  • Não, meu caro, você pode pegar o código da classe Lista e da ClasseDados e colocar em outro .cs. Coloquei junto apenas para exemplificar e não prolongar o texto.

    Juliano Nunes - http://linkedin.com/in/julianonunes

    Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.

    Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.

    quinta-feira, 1 de fevereiro de 2018 13:02
  • Jonh Kalak,

       Okay, vamos fazer os seguinte. Veja se você acha que fica legal.

       Separamos em:

       1 - Modelo (model) que é a estrutura da classe;

       2 - BLL (business) que são as regras de negócio;

       3 - Form (user interface) é o próprio formulário;

    -----------------------------------

    1 - MODEL (CLASSE - TipoModel.cs)

    namespace wfaComboBox
    {
         public class TipoModel
        {
            #region "Atributos"
            private string _tipoModel;
            #endregion
    
            #region "Construtores"
    
            /// <summary>
            /// Construtor da Classe VAZIO
            /// </summary>
            public TipoModel()
            {
            }
    
            /// <summary>
            /// Construtor da Classe
            /// </summary>
            /// <param name="_t">Parâmetro passado</param>
            public TipoModel(string _t) : base()
            {
                this._TipoModel = _t;
            }
            #endregion
    
            #region "Propriedades"
            /// <summary>
            /// Propriedade da Classe
            /// </summary>
            public string _TipoModel
            {
                get { return _tipoModel; }
                set { _tipoModel = value; }
            }
            #endregion
    
        }
    }

    2 - BLL (CLASSE - TipoBLL.cs)

    using System.Collections.Generic;
    
    namespace wfaComboBox
    {
        public class TipoBLL
        {
            #region "Atributos"
            public List<TipoModel> lista;
            #endregion
    
            #region "Construtores"
            public TipoBLL()
            {
    
            }
            #endregion
    
            #region "Metodos"
            public List<TipoModel> SelecionarTodos()
            {
                lista = new List<TipoModel>
                {
                    new TipoModel("A"),
                    new TipoModel("B"),
                    new TipoModel("C")
                };
    
                return lista;
            }
            #endregion
        }
    }

    3 - FORM (frmComboBox.cs)

    using System.Windows.Forms;
    
    namespace wfaComboBox
    {
        public partial class frmComboBox : Form
        {
            TipoModel clsTipoModel = new TipoModel();
            TipoBLL clsTipoBLL = new TipoBLL();
    
            public frmComboBox()
            {
                InitializeComponent();
                PreencheCombo();
            }
    
            /// <summary>
            /// Recebe a lista já separada e preenche a ComboBox
            /// </summary>
            public void PreencheCombo()
            {
                clsTipoBLL.SelecionarTodos();
    
                foreach (TipoModel item in clsTipoBLL.lista)
                {
                    this.cboTipoModel.Items.Add(item._TipoModel);
                }
            }
        }
    }

       Seria isso? A lista está em BLL...

    []'s,
    Fabio I.




    • Sugerido como Resposta Fabio I quinta-feira, 1 de fevereiro de 2018 13:49
    • Marcado como Resposta Jonh Kalak quinta-feira, 1 de fevereiro de 2018 13:50
    • Editado Fabio I quinta-feira, 1 de fevereiro de 2018 13:51
    quinta-feira, 1 de fevereiro de 2018 13:28
  • Juliano Nunes,

         Concordo que fica bem mais simples...

         ... mas como o Jonh Kalak disse que queria uma classe e eu estou acostumando a trabalhar em camadas, quis mostrar as classes separadas em cada uma de sua camada de programação. Realmente ficou, a princípio, um pouco mais complicado de entender, mas ficou muito mais bonito, você não acha? Depois que o Jonh Kalak enteder a forma de trabalhar, a estrutura propriamente dita, vai conseguir trabalhar muito melhor.

    Obrigado,

    Fabio I.

    quinta-feira, 1 de fevereiro de 2018 13:33
  • Exato!

    https://media.giphy.com/media/1Z02vuppxP1Pa/giphy.gif

    quinta-feira, 1 de fevereiro de 2018 13:53
  • quinta-feira, 1 de fevereiro de 2018 13:57
  • Olá Fabio,

    Não estou questionando a sua sugestão de resposta. Mas minhas respostas são baseadas em dois pontos:

    • o que o usuário do fórum realmente perguntou
    • excesso de complexidade (as vezes) desnecessária

    Como ele não pediu um modelo baseado em camadas, não sugeri isto. Outro ponto é que não sei o nível de conhecimento do usuário e não sei o objetivo, então isto pode levar a uma complexidade desnecessária.

    Mas toda sugestão no fórum é válida. Não é porque um usuário respondeu sugerindo da forma X que outro não pode sugerir de outra forma.

    Abraço.


    Juliano Nunes - http://linkedin.com/in/julianonunes

    Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.

    Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.

    quinta-feira, 1 de fevereiro de 2018 14:06
  • Juliano Nunes,

       Não discordo de você. Tudo que você escreveu faz muito sentido.

       Mas eu acho mais interessante elevarmos a qualidade das respostas propondo soluções tecnicamente mais perfeitas.

       * Meu motivo:

       Já vi tanto código "macarronada" que tive que fazer manutenção que até chorei... estava difícil demais de entender!

       Resumindo: Quanto mais o pessoal usar "boas práticas" mais feliz eu fico.

    Valew!

    Fabio I.

    quinta-feira, 1 de fevereiro de 2018 14:45