Itera através DataRepeater (VB.Net PowerPack)
-
09-09-2019 - |
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.
Solução
Você pode percorrer a lista de Controles (gerado a partir do modelo)
-
Renomear o seu caixa no DataRepeater para "checkBoxUnbound"
-
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);
}