在C#中检查列表视图中已检查项的最佳方法是什么?

在C#中检查列表视图中已检查项的最佳方法是什么?,c#,listview,for-loop,foreach,C#,Listview,For Loop,Foreach,我正在为工作编写一个数据库编辑器/Bill of Materials Maker(2个单独的.exe),我有一个疯狂的问题。以下是流程在应用程序中的工作方式:打开数据库、搜索数据库、检查所需项目、发送到BOM表生成器、另存为.xls 到目前为止,我可以将选中的项目发送到BOM表生成器,但前提是我打开搜索窗口,检查项目,而不实际搜索列表。目前在数据库编辑器的搜索表单中,我有以下循环: for (int i = 0; i < rowCount; i++) { if (ResultBox

我正在为工作编写一个数据库编辑器/Bill of Materials Maker(2个单独的.exe),我有一个疯狂的问题。以下是流程在应用程序中的工作方式:打开数据库、搜索数据库、检查所需项目、发送到BOM表生成器、另存为.xls

到目前为止,我可以将选中的项目发送到BOM表生成器,但前提是我打开搜索窗口,检查项目,而不实际搜索列表。目前在数据库编辑器的搜索表单中,我有以下循环:

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...
    }
}
for(int i=0;i
循环可以完美地工作,但前提是我避免使用搜索功能。搜索函数确实会清除ListView,并用结果填充它,但这有什么关系呢

我得到的错误是:

InvalidArgument=未指定“22”的值 对“索引”有效。参数名称: 索引

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

除非我需要查看我的搜索方法,否则是否有其他方法执行此操作? 我不擅长“foreach”循环,有人能给我一个意见吗


谢谢大家!

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

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

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

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

foreach (ListViewItem item in ResultBox1.Items)
{
    if (item.Checked)
    {
        // Do somethign with it
    }
}
假设它是System.Windows.Forms.ListView

foreach(ResultBox1.SelectedItems中的变量项) { //做事 }

SelectedItems与CheckedItems相同吗?我想不是,我想勾选一个复选框,将项目发送给BOM表制造商。IMO.I正在尝试使用您的代码,但是对于if语句,“item”没有“.Checked”选项。你知道我该怎么做吗?啊哈!!我明白了,我用“ListViewItems”代替了“var”,现在它就像一个符咒。谢谢啊,对不起-它可能假定
为Object类型。我的错-我会更新我的答案。 Assuming it is a System.Windows.Forms.ListView...

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