Каков наилучший способ проверить ListView для проверенных элементов в C #? - PullRequest
1 голос
/ 21 августа 2009

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

Пока что я могу отправлять проверенные элементы в 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", кто-нибудь может дать мне мнение?

Спасибо!

Ответы [ 3 ]

1 голос
/ 21 августа 2009

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

foreach (ListViewItem item in ResultBox1.Items)
{
    if (item.Checked)
    {
        // Do somethign with it
    }
}
1 голос
/ 21 августа 2009

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

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

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

var qry = from item in ResultBox1.Items where item.Checked select item;
foreach(var item in qry)
{
  // handle checked items individually. 
}
0 голосов
/ 21 августа 2009

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

foreach(var item in ResultBox1.SelectedItems)
{
   //Do stuff
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...