2009-08-21 2 views
1

Я пишу Редактор базы данных/Разработчик спецификаций (2 отдельных .exe) для работы, и у меня есть эта сумасшедшая проблема. Вот как работает поток в приложениях: открывать базу данных, базу данных поиска, проверять нужные элементы, отправлять в BOM Maker, сохранять как .xls.Каков наилучший способ проверить ListView для отмеченных элементов в C#?

До сих пор я могу отправлять проверенные элементы в BOM Maker, но только если я открою окно поиска, проверьте элементы, не выполнив фактически поиск в списке. В настоящее время в форме поиска редактора базы данных, у меня есть этот цикл:

for (int i = 0; i < rowCount; i++) 
{ 
    if (ResultBox1.Items[i].Checked == true) 
    { 
     //Code that creates .txt file to be loaded by the BOM Maker... 
    } 
} 

Цикл работает безотказно, но только если я избегаю с помощью функции поиска. Функция поиска очищает ListView и заполняет ее результатами, но почему это важно?

Ошибки я получаю:

InvalidArgument = значение '22' не действительно для 'индекса'. Имя параметра: индекс

«22» быть линии я проверил по отношению к массиву я использую для заполнения ListView с самого начала.

Если мне не нужно заглянуть в мой метод поиска, есть ли другой способ выполнить это действие? Я бесполезен в петлях «foreach», может ли кто-нибудь дать мне мнение?

Спасибо!

ответ

1

Это работает?

foreach (ListViewItem item in ResultBox1.Items) 
{ 
    if (item.Checked) 
    { 
     // Do somethign with it 
    } 
} 
+0

Я пытаюсь использовать свой код, но если заявление, опция «.Checked» не существует для „пункта“. Любая идея, как я могу заставить ее подойти? –

+0

AHA !! Я понял, вместо «var» я использовал «ListViewItems» вместо этого, и теперь он работает как шарм. БЛАГОДАРЯ! –

+0

Ahh, извините - вероятно, предполагается, что 'item' был типа Object. Мой плохой - я уточню свой ответ. –

1

Похоже, что основная проблема заключается в том, что вы получаете свой диапазон индексов от результатов своей базы данных, но ваш ListView не точно отражает результаты базы данных, которые вы используете для своего диапазона индексов.

Вы забыли что-то обновить, когда вы выполните поиск.

Возможно, самый простой способ справиться с этой проблемой - удалить зависимость от результатов базы данных и зависеть только от списка элементов списка ListView. Например:

var qry = from item in ResultBox1.Items where item.Checked select item; 
foreach(var item in qry) 
{ 
    // handle checked items individually. 
} 
0

 
Assuming it is a System.Windows.Forms.ListView...

foreach(var item in ResultBox1.SelectedItems) { //Do stuff }

+0

Является ли SelectedItems таким же, как CheckedItems? –

+0

Я верю, что это не так, я бы хотел проверить коробку на предмет (ы), чтобы отправить его/их в BOM Maker. Выбор строки не является функциональным, ИМО. –