Выполнить итерацию через DataRepeater (VB.Сетевой пакет питания)

StackOverflow https://stackoverflow.com/questions/591391

Вопрос

Я использую элемент управления winform datarepeater из vb.net блока питания.

Все элементы в повторителе доступны только для чтения, за исключением столбца с флажком.

Я хочу перебрать элементы и выяснить, какие флажки установлены.

Я не могу найти коллекцию datarepeateritems в элементе управления, а справки мало.

Спасибо за помощь.

Это было полезно?

Решение

Вы могли бы выполнить итерацию по списку элементов управления (сгенерированному на основе шаблона)

  1. Переименуйте свой флажок в datarepeater в "checkBoxUnbound".

  2. Используйте приведенный ниже код

    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);
    }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top