C# 如何获取最后一列ListView

C# 如何获取最后一列ListView,c#,winforms,listview,C#,Winforms,Listview,我有一个6列的列表视图。如何更改最后一个的文本 以下是完整的代码: string clientdata = Encoding.Default.GetString(data); string[] str = clientdata.Split('~'); listView1.Items[i].SubItems[2].Text = str[0]; listView1.Items[i].SubItems[3].Text = str[1]; listView1.Items[i].SubItems[

我有一个6列的列表视图。如何更改最后一个的文本

以下是完整的代码:

string clientdata = Encoding.Default.GetString(data); 
string[] str = clientdata.Split('~'); 
listView1.Items[i].SubItems[2].Text = str[0]; 
listView1.Items[i].SubItems[3].Text = str[1]; 
listView1.Items[i].SubItems[4].Text = str[2]; 
listView1.Items[i].SubItems[5].Text = str[3]; // Error here
break;
但我得到了一个错误:

InvalidArgument
值“5”对“index”无效

您可以这样做:

listView1.Items[i].SubItems[listView1.Items[i].SubItems.Count - 1].Text
或者使用Linq的扩展方法:

listView1.Items[i].SubItems.Cast<ListViewSubItem>().Last().Text
listView1.Items[i].SubItems.Cast().Last().Text
来自MSDN:

ListViewItem.ListViewSubItem集合中的第一个子项为 始终是拥有子项的项。在对设备执行操作时 集合中的子项,请确保引用索引位置1 而不是0来更改第一个子项

因此,第一个子项是
子项[1]
,因此应该是:

string clientdata = Encoding.Default.GetString(data); 
string[] str = clientdata.Split('~'); 
listView1.Items[i].SubItems[1].Text = str[0]; 
listView1.Items[i].SubItems[2].Text = str[1]; 
listView1.Items[i].SubItems[3].Text = str[2]; 
listView1.Items[i].SubItems[4].Text = str[3]; 
break;
假设有x列:
ListviewItem。子项[0]
表示第一列
ListviewItem。子项[1]
表示第二列

ListviewItem.SubItems[x-1]
表示最后一列

这很奇怪,但第二个选项(
listView1.Items[i].SubItems.Cast().last().Text
)不起作用。InvalidArgument=值“5”对“index”无效。没有错误,只是不修改文本(VS2012.NET4.5),起初,我认为与您相同的解决方案并对其进行了测试,这让我感到惊讶(第一种方案当然很好)。第二种方案让我感到惊讶:无法将类型为“ListViewSubItem”的对象强制转换为类型为“System.Windows.Forms.ListViewItem”。@Krazikiid很抱歉,这应该是
.cast()
查看我的更新答案。谢谢我制作了:)非常感谢。