我正在尝试比较两个datagridview单元格的值:
if (kk.BoringData.Rows[rows].Cells[0].Value != kk.BoringData.Rows[rows - 1].Cells[0].Value)
{
...
}
两个单元格值都是“B-1”,但它返回true。
答案 0 :(得分:1)
Value
属性的类型为object
,表示!=
operator的reference 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
}
}