2009-08-21 59 views
1

我正在为工作编写一个数据库编辑器/物料清单制作器(2个单独的.exe),并且我有这个疯狂的问题。以下是流程在应用程序中的工作方式:打开数据库,搜索数据库,检查需要的项目,发送到物料清单制造商,另存为.xls。在C#中检查ListView以检查项目的最佳方法是什么?

到目前为止,我可以将检查的项目发送到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,并用结果填充它,但为什么这很重要?

我得到的错误是: '22' 的

InvalidArgument = Value是不是 有效的 '索引'。参数名称: 索引

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

除非我需要看看我的搜索方法,是否有另一种方式来执行此操作? 我在“foreach”循环中没用,任何人都可以给我一个意见?

谢谢!

回答

1

这是行不通的吗?

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

我试图用你的代码,但是对于if语句中,“.Checked”选项是不存在的‘项目’。任何想法我怎么能得到它? – 2009-08-21 15:48:35

+0

AHA !!我想通了,而不是“var”,我用“ListViewItems”,而现在它就像一个魅力。谢谢! – 2009-08-21 17:19:25

+0

啊,对不起 - 它可能假定'item'是Object类型的。我的坏 - 我会更新我的答案。 – 2009-08-21 23:21:54

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. 
} 
0

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

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

+0

SelectedItems与CheckedItems相同吗? – 2009-08-21 15:39:17

+0

我相信这不是,我想检查一个项目的方框,将它发送给BOM制造商。选择行不作为功能,国际海事组织。 – 2009-08-21 15:54:12

相关问题