none
Método para CheckBoxList RRS feed

  • Pergunta

  • Boa Tarde!

    Pessoal preciso criar um método que capture o check que o usuario selecionou  no checkBoxList.

    Eu estava fazendo tipo este

     for (int i = 0; i < cbxlstParticipa.Items.Count; ++i)
            {
                if (cbxlstParticipa.Items[i].Selected)
                {
                    Funcao.Add(cbxlstParticipa.Items[i].Text);
                }
            }

    Mas esta linhas

    Funcao.Add(cbxlstParticipa.Items[i].Text)

    precisa que seja instanciado uma lista, tipo esta

    List<Exemplo> p = new List<Exemplo>();

    Mas no meu método quando eu coloco para instanciar ele não reconhece a minha classe e não da certo.

    O que eu faço?

    Os dados selecionados estarão em uma tabela e quando a pessoa selecionar salvarei oq ue ele selecionou sendo que

    ela selecionara mais de um e salvara em outra tabela.

    SOCORRO!..rs

    quinta-feira, 28 de novembro de 2013 17:59

Respostas

  • Certo Jaque, vamos lá, acho que agora deu pra entender o que você quer fazer.......hehehe

    Não sei se o seu código aí está exatamente como você postou, mas se você está fazendo toda essa operação no método void, o trecho

    return p;

    Não existe.

    Esse erro está acontecendo porque você está passando um parâmetro do tipo List, quando na verdade ele está esperando um tipo int.

    Pelo que eu entendi, os parâmetros da sua classe(SchoolID, ComboID e Name) receberão sempre um valor por vez, o único que pode ter mais de um valor no momento de Salvar é ProductID certo?

    Caso seja isso, você pode trocar o parâmetro da sua classe para que ao invés de receber int, ele receba um List de int, e no seu for, você adiciona todos os ID's dos produtos que foram selecionados,

    E depois do for, você usa a linha

     B.Combo obj = new B.Combo(ddlSchool.SelectedValue, SchoolID, p, txtName.Text);

    Ficaria assim:

    public int SchoolID { get; set; } 
    public int ComboID { get; set; } 
    public List<int> ProductID { get; set;}
    public string Name { get; set; }

    public Combo(int _SchoolID, int _ComboID, List<int> _ProductID, string _Name)
    {             
    this.SchoolID = _SchoolID;             
    this.ComboID = _ComboID;             
    this.ProductID = _ProductID;             
    this.Name = _Name; 
    } 

    E no seu Salvar:

    List<int> p = new List<int>();
    for (int i = 0; i < ckProducts.Items.Count; i++)
    {
    if (ckProducts.Items[i].Selected)
    {
    p.Add(int.Parse(ckProducts.Items[i].Text));
    }
    }
    B.Combo obj = new B.Combo(ddlSchool.SelectedValue, SchoolID, p, txtName.Text);



    • Marcado como Resposta Jaque JK segunda-feira, 2 de dezembro de 2013 16:40
    sexta-feira, 29 de novembro de 2013 17:55

Todas as Respostas

  • Jaque,

    Ficou meio confuso, veja se é isso que você precisa:

    List<Exemplo> p = new List<Exemplo>();
    for (int i = 0; i < cbxlstParticipa.Items.Count;++i)
    {
    if (cbxlstParticipa.Items[i].Selected)
    {
    p.Add(new Exemplo{Propriedade=cbxlstParticipa.Items[i].Text});
    }
    }

    Você tem que importar o namespace dessa classe Exemplo para a classe onde está o seu método.

    quinta-feira, 28 de novembro de 2013 18:52
  • Obrigada por responder!

    É mesmo né, eu compliquei desculpe!

    Assim, eu preciso capturar os checks que o usuário selecionar para salvar no banco.

    Coloquei este código abaixo, mas da o erro abaixo tb.

        if (txtName.Text != "")
                {
                    //int SchoolID = int.Parse(ddlSchool.SelectedValue);
    
                    //foreach(object dt in SchoolID){
                    
                    List<B.Combo> p = new List<B.Combo>();
                    for(int i = 0; i < ckProducts.Items.Count; i++)
                    {
                      if(ckProducts.Items[i].Selected)
                      {
                        int SchoolID = SchoolID = int.Parse(ckProducts.SelectedValue);
                        p.Add(new B.Combo(ckProducts.Items[i].Text));
    
                      }
                    
                    }
                       
                       
                        
                    }
    

    Erro:

    Error	5	'IASD.ASCS.Bussiness.Combo' does not contain a constructor that takes 1 arguments	D:\TFS\IASD.ASCS\IASD.ASCS.WebForm\register\combos\Default.aspx.cs	87	27	IASD.ASCS.WebForm
    

    quinta-feira, 28 de novembro de 2013 19:03
  • Então, ele deu erro porque você está passando o valor como se fosse para o seu construtor,

    Você tem alguma propriedade na sua classe B.Combo?

    Quando você for adicionar no list, você adiciona o objeto B.Combo, mas para isso antes você tem que passar o valor do seu checkbox para alguma propriedade dele.

    Ex:

    public class Exemplo
        {
            private int id;
    
            public int ID
            {
                get { return id; }
                set { id = value; }
            }
        }
        public class Execucao
        {
            List<Exemplo> objExemplo = new List<Exemplo>();
    
            public void Teste()
            {
                objExemplo.Add(new Exemplo { ID = 1 });
            }
        }

    Entendeu? 
    quinta-feira, 28 de novembro de 2013 19:32
  • Não entendi, desculpe!

    Essa é a minha classe Combo

     public Combo(int _SchoolID, int _ComboID, int _ProductID, string _Name)
            {
                this.SchoolID = _SchoolID;
                this.ComboID = _ComboID;
                this.ProductID = _ProductID;
                this.Name = _Name;
            }

    quinta-feira, 28 de novembro de 2013 19:44
  • public int SchoolID { get; set; }
            public int ComboID { get; set; }
            public int ProductID { get; set;}
            public string Name { get; set; }
    quinta-feira, 28 de novembro de 2013 19:44
  • O problema está ocorrendo, porque você está passando parâmetros errados para sua classe Combo.

    Atenciosamente, Samuel dos Anjos

    quinta-feira, 28 de novembro de 2013 20:11
  • Certo, vamos lá

    Você tem 4 propriedades na classe certo?

    public int SchoolID { get; set; }
     public int ComboID { get; set; }
     public int ProductID { get; set;}
    public string Name { get; set; }

    Quando você for adicionar no List:

    p.Add(new B.Combo{SchoolID = int.Parse(ckProducts.Items[i].Text)});

    Veja que depois de B.Combo eu tenho { ao invés de (

    Isso para passar o valor para a propriedade da classe.


    quinta-feira, 28 de novembro de 2013 20:13
  • Bom dia!

    Então, 

    o seu exemplo deu certo

    Eu fiz assim:

            protected void btnSave_Click1(int ProductID)
            {
    
                if (txtName.Text != "")
                {
                    //int SchoolID = int.Parse(ddlSchool.SelectedValue);
    
                    //foreach(object dt in SchoolID){
                    int SchoolID = int.Parse(hfComboID.Value);
                    List<B.Combo> p = new List<B.Combo>();
                    for (int i = 0; i < ckProducts.Items.Count; i++)
                    {
                        if (ckProducts.Items[i].Selected)
                        {
                            ProductID = int.Parse(ckProducts.SelectedValue);
    
                            p.Add(new B.Combo { ProductID = int.Parse(ckProducts.Items[i].Text) });
                        }
                    }
    
                    return p;
    
                    B.Combo obj = new B.Combo(ddlSchool.SelectedValue, SchoolID, p, txtName.Text);
    
                }
    
    
    
            }

    Eu preciso adicionar tudo isso na minha classe e no banco, pois é no meu botão salvar que eu estou criando o método, mas na linha

    94

     B.Combo obj = new B.Combo(ddlSchool.SelectedValue, SchoolID, p, txtName.Text);

    aparece o seguinte erro

    Error	6	Argument 3: cannot convert from 'System.Collections.Generic.List<IASD.ASCS.Bussiness.Combo>' to 'int'	D:\TFS\IASD.ASCS\IASD.ASCS.WebForm\register\combos\Default.aspx.cs	93	78	IASD.ASCS.WebForm
    

    Erro no P

    O que eu faço?

    Tu acha que foi uma boa opção colocar esse método no botão salvar?

    Sou nova com c#

    sexta-feira, 29 de novembro de 2013 09:28
  • Certo Jaque, vamos lá, acho que agora deu pra entender o que você quer fazer.......hehehe

    Não sei se o seu código aí está exatamente como você postou, mas se você está fazendo toda essa operação no método void, o trecho

    return p;

    Não existe.

    Esse erro está acontecendo porque você está passando um parâmetro do tipo List, quando na verdade ele está esperando um tipo int.

    Pelo que eu entendi, os parâmetros da sua classe(SchoolID, ComboID e Name) receberão sempre um valor por vez, o único que pode ter mais de um valor no momento de Salvar é ProductID certo?

    Caso seja isso, você pode trocar o parâmetro da sua classe para que ao invés de receber int, ele receba um List de int, e no seu for, você adiciona todos os ID's dos produtos que foram selecionados,

    E depois do for, você usa a linha

     B.Combo obj = new B.Combo(ddlSchool.SelectedValue, SchoolID, p, txtName.Text);

    Ficaria assim:

    public int SchoolID { get; set; } 
    public int ComboID { get; set; } 
    public List<int> ProductID { get; set;}
    public string Name { get; set; }

    public Combo(int _SchoolID, int _ComboID, List<int> _ProductID, string _Name)
    {             
    this.SchoolID = _SchoolID;             
    this.ComboID = _ComboID;             
    this.ProductID = _ProductID;             
    this.Name = _Name; 
    } 

    E no seu Salvar:

    List<int> p = new List<int>();
    for (int i = 0; i < ckProducts.Items.Count; i++)
    {
    if (ckProducts.Items[i].Selected)
    {
    p.Add(int.Parse(ckProducts.Items[i].Text));
    }
    }
    B.Combo obj = new B.Combo(ddlSchool.SelectedValue, SchoolID, p, txtName.Text);



    • Marcado como Resposta Jaque JK segunda-feira, 2 de dezembro de 2013 16:40
    sexta-feira, 29 de novembro de 2013 17:55