1

我要做的是检查listView(第5列)是否包含任何带有“是”字样的项目。如果它确实写“很好”,如果该列根本不包含任何带有“是”字样的项目,则写“坏”。

现在发生的事情是我的程序只写了 Bad (the else 语句),即使该列确实包含一个带有“是”字样的项目。

我怎样才能解决这个问题?:

foreach (ListViewItem item in listView1.Items) {
    if (item.SubItems[5].Text.Contains("Yes")) {
        // Do your work here
        labelContainsVideo2.Text = "GREAT";
        labelContainsVideo2.ForeColor = System.Drawing.Color.Green;
    } else {
        labelContainsVideo2.Text = "BAD";
        labelContainsVideo2.ForeColor = System.Drawing.Color.Red;
    }
}
4

3 回答 3

2

也许是为了这个案子?

foreach (ListViewItem item in listView1.Items)
{
  if (item.SubItems[5].Text.ToUpper().Contains("YES"))
  {
    // Do your work here
    labelContainsVideo2.Text = "GREAT";
    labelContainsVideo2.ForeColor = System.Drawing.Color.Green;
  }
  else
  {
    labelContainsVideo2.Text = "BAD";
    labelContainsVideo2.ForeColor = System.Drawing.Color.Red;
  }
}

另外,请记住,这种方式只会计算最后一个item. 如果你想显示所有项目的状态,你应该有一个标签数组或其他东西。如果您想知道是否有任何项目包含“是”,您应该遵循@ZombieSheep 的回答。

于 2012-11-22T15:15:06.200 回答
1

如果列表中的最后一项不包含“是”,那么无论其他项包含什么,输出都将为“BAD”。

试试这个...

string message = "BAD";
var msgColor = System.Drawing.Color.Red;
foreach (ListViewItem item in listView1.Items)
{
    if (item.SubItems[5].Text.Contains("Yes"))
    {
        message = "GREAT";
        msgColor = System.Drawing.Color.Green;
        break;   // no need to check any more items - we have a match!
    }
}
labelContainsVideo2.Text = message ;
labelContainsVideo2.ForeColor = msgColor;
于 2012-11-22T15:17:35.133 回答
1

尝试这个:

if(listView1.Items.Cast<ListViewItem>().Any(i => i.SubItems[5].Text.ToLower().Contains("yes"))){
    labelContainsVideo2.Text = "GREAT";
    labelContainsVideo2.ForeColor = System.Drawing.Color.Green;
}
else
{
    labelContainsVideo2.Text = "BAD";
    labelContainsVideo2.ForeColor = System.Drawing.Color.Red;
}
于 2012-11-22T15:23:19.637 回答