datagridview单元格值的比较

时间:2014-02-03 23:08:45

标签: c#

我正在尝试比较两个datagridview单元格的值:

if (kk.BoringData.Rows[rows].Cells[0].Value != kk.BoringData.Rows[rows - 1].Cells[0].Value)
{
...
}

两个单元格值都是“B-1”,但它返回true。

3 个答案:

答案 0 :(得分:1)

Value属性的类型为object,表示!= operatorreference equality测试(两个对象是否占用内存中的相同位置)。要按照比较字符串,您可以尝试使用Equals

if (!kk.BoringData.Rows[rows].Cells[0].Value.Equals(kk.BoringData.Rows[rows - 1].Cells[0].Value))

或者在测试它们之前将它们转换为字符串:

if (kk.BoringData.Rows[rows].Cells[0].Value.ToString() != kk.BoringData.Rows[rows - 1].Cells[0].Value.ToString())

答案 1 :(得分:0)

尝试将Value属性强制转换为适当的类型,例如string,int,double然后执行比较。

Google for C#unboxing

答案 2 :(得分:0)

我将在这里重申一下,因为我遇到了类似的问题,并在上​​面找到了关于“引用平等”的解释,但添加此代码的观点略有不同。

if (e.ColumnIndex == Column1.index && e.RowIndex > 0)
   {
      //if (DataGridView[Column1.Index, e.RowIndex].Value == DataGridView[Column1.Index, e.RowIndex - 1].Value)  //Always false. Reference Equality
      //if ((string)DataGridView[Column1.Index, e.RowIndex].Value == (string)DataGridView[Column1.Index, e.RowIndex - 1].Value) //True or False as expected. Value Equality
      if (DataGridView[Column1.Index, e.RowIndex].Value.Equals(DataGridView[Column1.Index, e.RowIndex - 1].Value)) //True or False as expected. Value Equality
      {//Do Stuff
      }
      else
      {//Do other stuff
      }
   }