【问题标题】:Check Items of a listView if it is String.Empty检查 listView 的 Items 是否为 String.Empty
【发布时间】:2018-08-30 15:57:21
【问题描述】:

我有 3 个项目和 1 个子项目的列表视图

所以我想检查 item[3] 上的一行是否为 String.Empty。

如果 items[3] 为空,它不会将我的 items[3] 传递给 label1.Text。 如果 items[3] 不为空,它会将我的 items[3] 传递给我的 label1.Text .

这是我的代码

if (listView1.Items[3].SubItems[1].Text == string.Empty)
{
    label1.Text = "";
}
else
{
    label1.Text = listView1.Items[3].SubItems[1].Text;
}

当我的第 3 行为空时,出现错误:InvalidArgument=Value of '3' is not valid for 'index'。

那么我如何检查该行是否为空,如果它为空我应该做什么验证我不会将我的项目传递给 label1.Text,如果它不为空,它将把项目传递给 label1.Text

【问题讨论】:

  • 如果你有 3 个项目,你的索引是 2。
  • 索引以0 开始,所以第一个元素在位置[0] 等等...
  • 使用 Linq 的 Skip()Take() 和 null 条件运算符可能会更安全,如果你不是 100% 确信索引会在那里。显然不会那么快,但差异应该很小
  • 我认为this tutorial 可能会有所帮助
  • 假设我有 4 个项目,如果我的 index[3] 为空怎么办?同样的问题。我如何检查该行是否为空,如果它为空我应该做什么验证我不会将我的项目传递给 label1.Text,如果它不为空,它会将项目传递给 label1.Text

标签: c# winforms listview


【解决方案1】:

你有 3 个项目,所以最大索引是 2,因为数组的索引从 0 开始计数。

子项的原则相同。

使用Items[2]SubItems[0]

if (listView1.Items[2].SubItems[0].Text == string.Empty)

【讨论】:

  • 先生,如果我有 4 个项目,项目 [3] 是空的。我应该怎么做才能不将 item[3] 传递给我的 label1?如果它不为空,我将传递给我的 label1?提前谢谢你!
【解决方案2】:

C# 中的索引从 0 开始,因此包含 3 个项目的集合将具有 012 的索引。根据您的问题,您的 if 语句应如下所示:

if (listView1.Items[2].SubItems[0].Text == string.Empty)

当尝试通过索引访问某些内容时,您通常应该进行某种安全检查,例如在尝试访问可能超出范围的内容之前检查.Length.Count。您还可以利用一些 Linq 和 null 条件运算符来使事情变得更安全一些(尽管自枚举以来稍微慢了一点):

//Skip 2, take the 3rd if its there then take the first SubItem. 
//label1.Text is either the text or an empty string
label1.Text = listView1.Items.Skip(2).FirstOrDefault()?.SubItems
                     .FirstOrDefault()?.Text ?? string.Empty;

【讨论】:

  • for (int i = 0; i < listView3.Items.Count; i++) { label1Text = listView3.Items[i].SubItems[0].Text; label2Text = listView3.Items[i].SubItems[0].Text; label3Text = listView3.Items[i].SubItems[0].Text; } 现在我正在使用此代码将我的 3 个项目传递给每个标签。但它将所有相同的一项传递给所有 3 个标签
  • @user6767011 我不知道该代码应该代表什么。你有问题吗?
  • 是的,先生。我有 4 个标签,每个标签代表我的列表视图中的每一行或项目。现在我只有 3 个将传递给 label1-3 的项目,而我的第 4 行或第 3 个索引为空。那么我应该怎么做才能不将空项目 [3] 传递给我的 label4.. 提前谢谢!
  • @user6767011 你真的试过我的代码了吗?特别是 Linq 的东西?
猜你喜欢
  • 2017-10-07
  • 1970-01-01
  • 1970-01-01
  • 2011-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-16
  • 1970-01-01
相关资源
最近更新 更多