none
CheckBox Dinâmicas RRS feed

  • Pergunta

  • Bom dia,

    estou desenvolvendo um Crud, e na tela de cadastro tenho que retornar algumas matérias do Sql Server em checkboxs. Porém, o número de checkbox vai variar de acordo com o número de matérias cadastradas, por exemplo, se eu tiver química, e português, viram 2 checkbox. 

    E gostaria de saber como faço isso? Já fiz isso no ASP.Net utilizando o Controle Repeater, mas como no Windows Forms não tem esse controle, não sei como fazer.

    Obrigado

    domingo, 2 de setembro de 2012 07:58

Todas as Respostas

  • Julio você pode percorrer esta sua fonte de dados e ir adicionando manualmente um por um dentro do container que lhe interessa, veja este exemplo de código aonde adiciono 10 CheckBox dentro do Form principal, apenas tomando cuidado para alterar a posição de cada para não ficar um sobre o outro:

    using System;
    using System.Linq;
    using System.Windows.Forms;
    using System.Data;
    
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                //Simulando sua fonte de dados
                DataTable dt = new DataTable();
    
                //Criando colunas
                dt.Columns.Add("Materia", typeof(string));
    
    
                //Valores fake
                for (int i = 0; i < 10; i++)
                    dt.Rows.Add("Materia" + i);
    
                //Adicionando CheckBox ao form principal
                for (int i = 0; i < dt.Rows.Count; i++)
                    this.Controls.Add(new CheckBox() { Text = dt.Rows[i]["Materia"].ToString(), Location = new System.Drawing.Point(0, i * 20) });
    
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                var allCheckBox = this.Controls.OfType<CheckBox>();
    
                //Recuperando apenas os selecionados
                var allCheckboxChecked = allCheckBox.Where(f => f.Checked);
            }
        }
    }
    

    O resultado obtido foi esse:



    No click do button1 coloquei um código aonde recupera todos os CheckBox, e outro código para recuperar apenas os marcados, veja o resultado:




    Tome como base este código e tente adaptar, boa sorte.

    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/

    segunda-feira, 3 de setembro de 2012 00:54
  • Muito obrigado Vitor, se possível me da mais uma ajudinha. Como que eu farei para gravar isso no banco?

    Por exemplo, eu criei uma classe Aluno

    string nomeAluno;

    string idadeAluno;

    List<string> Materias;

    E tenho uma tabela Aluno no Banco

    idAluno int,

    nomeAluno varchar(50),

    idadeAluno int.

    materias (?????)

    Como um aluno pode ter varias matérias, estou usando uma collection (List), mas o problema é que não sei como faço para gravar elas no banco, já que é uma List. Acho que terei que criar uma nova tabela e fazer um relacionamento, mas não sei como fazer isso, então se puder dar uma mão agradeço.

    Obrigado.

    segunda-feira, 3 de setembro de 2012 02:25
  • Julio desculpe a demora para responder. Não teu cenário você tem uma tabela Aluno e outra Materia, você pode criar uma tabela AlunoMateria, onde nela sera gravado o ID do Usuario e as respectivas Materia selecionada pelo usuário, veja este DER:

    Script SQL:

    CREATE TABLE [dbo].[Aluno](
    	[IdAluno] [int] IDENTITY(1,1) PRIMARY KEY,
    	[NomeAluno] [varchar](250) NOT NULL
    ) 
    GO
    
    CREATE TABLE [dbo].[Materia](
    	[IdMateria] [int] IDENTITY(1,1) PRIMARY KEY,
    	[NomeMateria] [varchar](100) NOT NULL
    )
    GO
    
    CREATE TABLE [dbo].[AlunoMateria](
    	[IdAlunoMateria] [int] IDENTITY(1,1) PRIMARY KEY,
    	[IdAluno] [int] NOT NULL,
    	[IdMateria] [int] NOT NULL,
    	CONSTRAINT FK_AlunoMateria_Aluno FOREIGN KEY ([IdAluno]) REFERENCES [Aluno]([IdAluno]),
    	CONSTRAINT FK_AlunoMateria_Materia FOREIGN KEY ([IdMateria]) REFERENCES [Materia] ([IdMateria])
    )
    GO

    Com isso você garante que a matéria que o aluno esta vinculado exista.

    Vamos supor que exista as seguintes matérias (10 - Português, 22 - Matemática, 33 - Geografia) e o ID do aluno é 4. Logo os registro gravado na tabela AlunoMateria ficaria assim:

    IdAlunoMateria (IDENTITY) - IdAluno - IdMateria
    1---------------------------------4-----------10----------
    2---------------------------------4-----------22----------
    3---------------------------------4-----------33----------


    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/

    • Sugerido como Resposta Vitor Mendes quinta-feira, 11 de outubro de 2012 18:41
    quinta-feira, 13 de setembro de 2012 00:23