Pergunta

Eu estou usando o controle DataRepeater winform do bloco de poder vb.net.

Todos os itens no repetidor são somente leitura, exceto por uma coluna de caixa de seleção.

Eu quero iterar sobre os itens e descobrir quais caixas de seleção estão marcadas.

Não consigo encontrar uma coleção de datarepeateritems no controle e ajuda é escassa.

Obrigado pela ajuda.

Foi útil?

Solução

Você pode percorrer a lista de Controles (gerado a partir do modelo)

  1. Renomear o seu caixa no DataRepeater para "checkBoxUnbound"

  2. Use o código abaixo

    private void button3_Click(object sender, EventArgs e)
    {
        int i = 0;
        CheckBox unboundCheckBox;
        foreach (Control c in dataRepeater1.Controls)
        {
            unboundCheckBox = c.Controls["checkBoxUnbound"] as CheckBox;
            if (unboundCheckBox != null && unboundCheckBox.Checked)
            {
                i++;
            }
        }
    
        Console.WriteLine("DEBUG: checked found: " + i);
    
    }
    

Outras dicas

Este foi perguntado há um tempo atrás, mas apenas no caso de alguém está procurando uma resposta:

for (int i = 0; i < this.dataRepeater1.ItemCount; i++)
{
    this.dataRepeater1.CurrentItemIndex = i;

    CheckBox checkBox = (CheckBox)
                this.dataRepeater1.CurrentItem.Controls["controlName"];
    bool isChecked = checkBox.Checked;
}

Esta abordagem torna muito mais fácil de processo / ler quaisquer controles relacionados no mesmo item de repetidor.

Por que não basta verificar a fonte de dados do DataRepeater?

por exemplo. Eu tenho um DataRepeater vinculado a um BindingSource para Pessoas Veja manipulador do botão

    private void Form1_Load(object sender, EventArgs e)
    {
        List<Person> persons = new List<Person>();
        persons.Add(new Person { Name = "Peter", IsLocal = true });
        persons.Add(new Person { Name = "Sepp", IsLocal = false });
        persons.Add(new Person { Name = "Franz", IsLocal = false });

        personBindingSource.DataSource = persons;
    }


    private void buttonCountCheckBox_Click(object sender, EventArgs e)
    {
        int i = 0;

        foreach (Person singlePerson in personBindingSource)
        {
            if (singlePerson.IsLocal)
            {
                i++;
            }

        }
        Console.WriteLine("DEBUG: checked found: " + i);
    }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top