【问题标题】:What is the best way to check a ListView for checked Items in C#?在 C# 中检查 ListView 中已检查项目的最佳方法是什么?
【发布时间】:2009-08-21 14:08:11
【问题描述】:

我正在为工作编写一个数据库编辑器/物料清单生成器(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...
    }
}

循环完美无缺,但前提是我避免使用搜索功能。搜索功能确实会清除 ListView,并用结果填充它,但这有什么关系呢?

我得到的错误是:

InvalidArgument='22' 的值不是 对“索引”有效。参数名称: 索引

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

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

谢谢!

【问题讨论】:

    标签: c# listview for-loop foreach


    【解决方案1】:

    这行得通吗?

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

    【讨论】:

    • 我正在尝试使用您的代码,但对于 if 语句,“项目”没有“.Checked”选项。知道我怎样才能让它出现吗?
    • 啊哈!!我想通了,而不是“var”,我使用了“ListViewItems”,它现在就像一个魅力。谢谢!
    • 啊,抱歉 - 它可能假设 item 是 Object 类型。我的错 - 我会更新我的答案。
    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

      假设它是一个 System.Windows.Forms.ListView...

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

      【讨论】:

      • SelectedItems 和 CheckedItems 一样吗?
      • 我相信不是,我想选中项目的复选框以将其发送给 BOM 制造商。选择行不是功能,IMO。
      猜你喜欢
      • 2013-02-21
      • 2020-11-08
      • 1970-01-01
      • 1970-01-01
      • 2010-09-18
      相关资源
      最近更新 更多