2012-11-22 68 views
1

我想要做的是检查listView(column5)是否包含任何与单词'是'的项目。如果它写的是'好的',如果列中不包含ALL中的任何项目,并且'Yes'字样写'Bad'。C#:if else语句与listView

现在发生什么事情是我的程序只写Bad(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; 
    } 
} 
+0

你能提供一些数据,您正在使用? –

+2

你是否意识到唯一可以计数的项目是最后一个? – Diego

+0

您是否检查过数据绑定后执行此操作? – jbl

回答

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; 
+0

谢谢,你是他第一次回应工作,谢谢 –

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答案。

+0

没有工作。 “是”这个词写成“是”,而不是是 –

+0

当我将文本转换为大写时,它应该搜索'是',而不是'是'。 – Diego

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; 
}