检查ListView中C#中已检查项目的最佳方法是什么?

时间:2009-08-21 14:08:11

标签: c# listview for-loop foreach

我正在编写一个数据库编辑器/ Bill of Materials Maker(2个单独的.exe)来工作,我有这个疯狂的问题。以下是应用程序中流程的工作原理:打开数据库,搜索数据库,检查所需物品,发送给BOM制造商,另存为.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”的值不是   对'index'有效。参数名称:   索引

'22'是我检查的相对于我用来从一开始填充ListView的数组的行。

除非我需要查看我的搜索方法,否则还有其他方法可以执行此操作吗? 我在“foreach”循环中没用,有人能给我一个意见吗?

谢谢!

3 个答案:

答案 0 :(得分:1)

看起来主要问题是您从数据库结果中获取索引范围,但ListView不能准确反映您用于索引范围的数据库结果。

您在搜索时忘记更新某些内容。

处理该问题的最简单方法可能是删除对数据库结果的依赖性,并仅依赖于ListView Items列表。例如:

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

答案 1 :(得分:1)

这有用吗?

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

答案 2 :(得分:0)

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

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