Выполнить итерацию через DataRepeater (VB.Сетевой пакет питания)
-
09-09-2019 - |
Вопрос
Я использую элемент управления winform datarepeater из vb.net блока питания.
Все элементы в повторителе доступны только для чтения, за исключением столбца с флажком.
Я хочу перебрать элементы и выяснить, какие флажки установлены.
Я не могу найти коллекцию datarepeateritems в элементе управления, а справки мало.
Спасибо за помощь.
Решение
Вы могли бы выполнить итерацию по списку элементов управления (сгенерированному на основе шаблона)
Переименуйте свой флажок в datarepeater в "checkBoxUnbound".
Используйте приведенный ниже код
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); }
Другие советы
Этот вопрос был задан некоторое время назад, но на всякий случай, если кто-то еще ищет ответ:
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;
}
Такой подход значительно упрощает обработку / чтение любых связанных элементов управления в одном и том же элементе repeater.
Почему бы просто не проверить источник данных datarepeater?
Например.У меня есть datarepeater, привязанный к источнику привязки для Persons Смотрите обработчик кнопок
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);
}