0

如果它们被选中,我想删除一些 ListViewSubItem。我想将它们从 ListView 和 sku 的列表(列出产品)中删除。如果我将 1 添加到 ListViewSubItem 的索引中,我会收到 ArgumentOutOfRangeException,如果我不这样做,我将无法删除第一个子项。请帮忙。谢谢。我的代码:

 int count = lv_list.Items.Count;
 for (int j = count - 1; j >= 0; j--)    
 if (lv_list.Items[j].Checked)
 {
    sku = lv_list.Items[j].SubItems[j+1].Text; 
    lv_list.Items[j].Remove();
    DeleteProductBySKU(sku);
  }
4

1 回答 1

2

正如评论所指出的,j+1是一个错误的索引SubItems。您确定的是,它j是 的有效索引Items,但没有关于相应索引的任何信息SubItems(如果j+1或什至j有效)。避免错误的快速修复:

for (int j = count - 1; j >= 0; j--)
    if (lv_list.Items[j].Checked)
    {
        if (lv_list.Items[j].SubItems.Count - 1 >= j + 1) //lv_list.Items[j].SubItems.Count - 1 -> last index of SubItems
        {
            sku = lv_list.Items[j].SubItems[j + 1].Text;
        }
        else
        {
            sku = lv_list.Items[j].SubItems[lv_list.Items[j].SubItems.Count - 1].Text;
            //sku = lv_list.Items[j].SubItems[0].Text -> to choose the first SubItem
        }
        lv_list.Items[j].Remove();
        DeleteProductBySKU(sku);
    }

上面的代码在不是有效索引SubItem的情况下采用最后一个。j+1它避免了错误,但我想这不是你要找的。您应该更新代码以修改SubItem您真正想要的(它应该是一个常量值或由另一个不同于 的计数器定义j)。

于 2013-10-15T18:06:56.343 回答