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