为datagrid值创建IF语句

时间:2010-05-30 22:40:00

标签: c# datagrid if-statement

这是我认为比现在更容易的事情。无论出于何种原因,我似乎无法找到一种方法来制作我在这里尝试使用If语句的工作:

  List<int> miscTimes = new List<int>();

            for (int i = 0; i < MISCdataGridView1.RowCount; i++)
            {
                if (MISCdataGridView1.Rows[i].Cells[2].Value == "Something")
                {
                    miscTimes.Add(Convert.ToInt32(MISCdataGridView1.Rows[i].Cells[3].Value));
                }
            }
            return miscTimes;

出于某种原因,我不能让它像if语句那样:

if (MISCdataGridView1.Rows[i].Cells[2].Value == "Something")

它没有抛出异常,但它没有构建我的列表。它有绿色下划线并说“可能的意外参考比较;将左侧类型转换为'字符串'”   我已经尝试过转换为字符串和所有这些。我应该怎么做呢?

3 个答案:

答案 0 :(得分:2)

DataGridViewCell.Value属性的类型为Object,因此您必须转换为String

(String)dataGridview.Rows[i].Cells[j].Value == "Something"

或依赖Object.Equals()

Object.Equals(dataGridview.Rows[i].Cells[j].Value, "Something")

使用Object.Equals()更加健壮,因为它可以处理不属于String类型的值。另一方面,使用强制转换强调了一个事实,即值必须是String并且如果不是则会抛出异常 - 清楚地表明你可能有一个错误。

答案 1 :(得分:0)

Value属性的类型为Object 因此,您使用的是标准==运算符,它通过引用比较对象。

要正确比较字符串,您需要按值进行比较。 (因为您可以有两个不同的String个实例保持相同的值)

将其更改为

if ((string)MISCdataGridView1.Rows[i].Cells[2].Value == "Something")

答案 2 :(得分:0)

看起来“Value”返回一个对象,并且您正在与一个字符串进行比较,因此当您想要比较该值时,它正在比较引用,即“Something”。将左侧转换为字符串(或调用ToString(),无论如何,只需确保您明确比较两个字符串)。