我正在编写一个数据库编辑器/ 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”循环中没用,有人能给我一个意见吗?
谢谢!
答案 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 }