将datagridview单元格值与DataGridViewImageColumn中的图像进行比较

时间:2012-10-03 04:38:29

标签: c# datagridview compare datagridviewcolumn

我创建了一个DataGridViewImageColumn,如果图像单元格的值是绿色复选框图像,则想要执行操作。 代码如下。但它不会进入条件

if (dgvException.Rows[e.RowIndex].Cells["colStock"].Value 
                                              == Properties.Resources.msQuestion)
{
    //Some code
}

请帮忙。

3 个答案:

答案 0 :(得分:2)

我建议使用单元格Tag属性添加表示图像的文本值 - 例如数字或名称,并使用它来检查显示的图像。

答案 1 :(得分:1)

使用相等运算符(==)检查图像的相等性并不像您需要的那样工作。这就是为什么你的等号检查总是返回false。

您需要确定两个图像的内容是否相同 - 为此,您需要对DGV单元格中的图像进行逐像素检查和参考图片。我找到了一些指向this article的链接,用于演示比较两个图像。我从文章中采用了图像比较算法,并将其浓缩为一个方法,该方法需要两个Bitmaps作为参数进行比较,如果图像相同则返回true:

private static bool CompareImages(Bitmap image1, Bitmap image2) {
    if (image1.Width == image2.Width && image1.Height == image2.Height) {
        for (int i = 0; i < image1.Width; i++) {
            for (int j = 0; j < image1.Height; j++) {
                if (image1.GetPixel(i, j) != image2.GetPixel(i, j)) {
                    return false;
                }
            }
        }
        return true;
    } else {
        return false;
    }
}

(警告:代码未经测试)

使用此方法,您的代码变为:

if (CompareImages((Bitmap)dgvException.Rows[e.RowIndex].Cells["colStock"].Value, Properties.Resources.msQuestion)) {
    //Some code 
} 

答案 2 :(得分:1)

在我的案例中,S.Ponsford的答案非常有效,我做了这个通用的例子。 PD:请记住我的第0列是我的DataGridViewImageColumn

if (this.dataGridView.CurrentRow.Cells[0].Tag == null)
{                                                    
     this.dataGridView.CurrentRow.Cells[0].Value= Resource.MyResource1;
     this.dataGridView.CurrentRow.Cells[0].Tag = true;                       
}
else
{
     this.dataGridView.CurrentRow.Cells[0].Value = Resources.MyResource2;
     this.dataGridView.CurrentRow.Cells[0].Tag = null;                        
}