C#:替换Listview中的空白项目文本?

时间:2012-11-21 22:30:34

标签: c# windows forms listview

我如何将listView第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");
     }
 }

3 个答案:

答案 0 :(得分:1)

如果我是你,我会Use the debugger找出实际发生的事情。

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

我能想到的唯一可能的事情可能是你在某个地方犯了一个错字或i.SubItems[4]实际上只是无效。


也许你正在迭代一些列表项,但并非所有列表项都有5列,或者有些列是空的。

答案 1 :(得分: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 /强>

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

答案 2 :(得分:1)

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

if (i.SubItems != null && string.IsNullOrEmpty(i.SubItems[4].Text))
{
    i.SubItems[4].Text = "No";
}