1

我将如何用“否”一词替换列表视图第 5 列中的空白项文本?

我试过这个,但它抛出了一个InvalidArgument=Value of '4' is not valid for 'index'.错误:

 foreach (ListViewItem i in listView1.Items)
 {
     if (i.SubItems[4].Text == " ")
     {
         i.SubItems[4].Text = i.SubItems[4].Text.Replace(" ", "No");
     }
 }
4

3 回答 3

1

如果我是你,我会使用调试器来弄清楚实际发生了什么。

您可以检查并查看 中的实际内容i.SubItems,并确保它确实是您认为的内容。

我能想到的唯一可能的事情是您在某处打错了字,或者i.SubItems[4]实际上是无效的。


也许您正在遍历您的一些列表项,但并非所有列表项都有 5 列,或者有些是空的。

于 2012-11-21T22:37:33.007 回答
1

上面提供的代码将获取其中的所有项目ListView1.Items并检查索引的子项目4及其属性Text是否相等, 如果索引超出数组限制,则可能导致描述的错误。您可以通过确保该项目不是 来避免这种情况Nothing

例子

foreach (ListViewItem i in listView1.Items) //Get all items in listView1.Items
{
   if (i.SubItems.Count > 3) //Continue if i.SubItems.Count is more than 3 (The array contains i.SubItems[3] which refers to an item within the 4th column (i.SubItems.Count is not an array. Therefore, it'll start with 1 instead of 0))
   {
       if (i.SubItems[3].Text == " ") //Continue if i.SubItems[3].Text is equal to  
       {
            i.SubItems[3].Text = i.SubItems[3].Text.Replace(" ", "No"); //Replace   with No
       }
   }
}

注意:数组是零索引的,这意味着它们以 0 而不是 1 开头。
注意:如果您只有 4 列,i.SubItems.Count则为 4 而不是 3,因为int 考虑到所有列都已填充,这是正常现象。

谢谢,
我希望你觉得这有帮助:)

于 2012-11-21T22:43:05.210 回答
1

一旦你弄清楚了第一个错误,你替换文本的逻辑可能会像这样更好地工作:

if (i.SubItems != null && string.IsNullOrEmpty(i.SubItems[4].Text))
{
    i.SubItems[4].Text = "No";
}
于 2012-11-21T22:43:27.677 回答