将Winforms DataGridView中布尔单元格的默认复选框替换为自定义图像

本文关键字:替换 复选框 自定义 图像 默认 DataGridView Winforms 布尔 单元格 | 更新日期: 2023-09-27 18:22:12

有一个DataGridView(只读)和数据源,有些项是布尔值。

DataGridView呈现这些项目的常用复选框,我想使用一些漂亮的勾号图像。我可以用我的自定义图像替换默认的复选框渲染吗?

    for (int i = 0; i < dataGridView.Rows.Count; i++)
    {                       
        int cellsCount = dataGridView.Rows[i].Cells.Count;
        for (int j = 0; j < cellsCount; j++)
        {
            var cells = dataGridView.Rows[i].Cells;
            object value = cells[j].Value;
            if (value is bool)
            {
                bool b = (bool)value;
                if (b)
                {
                    cells[j].Style.BackColor = Color.LightGreen;  
                    //TODO - add some pretty image of tick                          
                }
                else
                {
                    cells[j].Style.BackColor = Color.Orange;
                    //TODO - add some pretty image of red cross (cancel icon)
                }
            }
        }
    }

将Winforms DataGridView中布尔单元格的默认复选框替换为自定义图像

我在以前的解决方案中使用了一些操作:

 private void grdServices_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
        {
            DataGridViewImageColumn img = new DataGridViewImageColumn();
            img.Name = "img";
            img.HeaderText = "CheckOut";
            img.ReadOnly = true;
            int number_of_rows = grdServices.RowCount;
            if (number_of_rows > 0)
            {
                grdServices.Columns.Add(img);
                for (int i = 0; i < number_of_rows; i++)
                {
                    if (bool.Parse(grdServices.Rows[i].Cells[27].Value.ToString()) == true)
                    {
                        grdServices.Rows[i].Cells["img"].Value = (System.Drawing.Image)Properties.Resources.yes;
                    }
                    else
                    {
                        grdServices.Rows[i].Cells["img"].Value = (System.Drawing.Image)Properties.Resources.no;
                    }
                }
            }
        }
    }

您是否尝试将图像放入单元格值?

 dataGridView1.Rows[i].Cells[j].Value=new Bitmap("tickImg.png");