2009-02-26 5 views
0

Я использую элемент управления winform datarepeater из блока питания vb.net.Итерация через DataRepeater (VB.Net PowerPack)

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

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

Я не могу найти коллекцию datarepeateritems на контроле, а помощь мало.

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

ответ

0

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

  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); 
    
    } 
    
+0

Я тестировал это, и это не сработает, если у вас есть больше предметов, чем те, которые соответствуют моему контролю. Это означает, что элементы управления, видимые только прокруткой, не отображаются в 'dataRepeater1.Controls'. @ peter-gfader, любые идеи? – Joel

+0

Хм ... Не сейчас. Возможно, есть еще один способ перебора всех элементов управления. Я ожидал, что это будет «.Controls» –

+0

Возможная работа вокруг: «Список », «Коллекция» или что-то в этом роде отслеживает возможные изменения (например, выбор строки - я поддерживаю результаты фильтрации, поэтому эта стратегия работает для меня), и я использовал такие события, как 'DataRepeater_ItemClick' ou' DataRepeater_DrawItem', чтобы правильно использовать элементы dsiplay/update. При итерации я повторяю в списке/коллекции вместо 'DataRepeater'. Не изящное решение, но оно действительно работает. – Joel

0

Почему бы просто не проверить источник данных datarepeater?

E.g. У меня есть DataRepeater привязанных к BindingSource для лиц См Обработчик кнопки

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); 
    } 
+0

Флажок не связан и не является частью источника данных. Это первый столбец и используется для проверки действия, например. удалить все выбранные. –

+0

см. Другой ответ –

2

Это было предложено некоторое время назад, но только в случае, если кто-то ищет ответ:

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; 
} 

Такой подход делает его гораздо проще обрабатывать/читать любые связанные элементы управления на одном изделии повторителя.

Смежные вопросы