C#在单个单元格DataGirdViewImageColumn中Winform多个图像

时间:2015-08-25 13:00:58

标签: c# winforms

我想在DataGirdViewImageColumn

中将多个图像添加到一个单元格中

enter image description here

你可以很容易地看到五个不同颜色的圆圈,起初,我已经尝试过编写"•" DataGirdViewTextBoxColumn中的字符,但我无法更改每个字符的颜色,有没有人有任何想法这样做?

非常感谢

2 个答案:

答案 0 :(得分:1)

这是一个细胞绘画这个Cell的例子: enter image description here

CellPainting事件可以完成工作:

private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
    if (e.ColumnIndex == 2 && e.RowIndex >= 0 && e.Value != null)
    {
        // use your own code here...
        string val = ((int)e.Value).ToString("00000000");

        e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
        e.PaintBackground(e.CellBounds, false);

        for (int i = 0; i < count; i++)
            using (SolidBrush brush = new   // ..and here!!!
                   SolidBrush(colors[Convert.ToInt16(val[i].ToString())]))
                e.Graphics.FillEllipse(brush, 
                    e.CellBounds.X + i * 12 + 6, e.CellBounds.Y + 5 , 11, 11);
        e.Handled = true;

    }

}

它使用预定义的颜色列表:

 List<Color> colors = new List<Color>() // use your own set of colors here!
 { Color.Red, Color.Black, Color.Blue, Color.ForestGreen, Color.DarkKhaki, 
   Color.Goldenrod, Color.DeepPink, Color.Orange, Color.DarkSlateGray, Color.GreenYellow };

并计算要绘制的点数:

    int count = 7; // ditto!

显然,您可能想要更改我为测试存储数据的方式......

我存储了一个大整数作为单元格的值,每个digint都映射到一种颜色。

你可以(也可能应该)改变这个!

以下是我如何设置DGV:

        dataGridView1.Columns.Add("asd", "asd");
        dataGridView1.Columns.Add("ko", "ok");
        dataGridView1.Columns.Add("col", "col");
        dataGridView1.Rows.Add(66);
        for (int r = 0; r < 66; r++)
        {
            dataGridView1[0, r].Value = r;
            dataGridView1[1, r].Value = r * 3.14f;
            dataGridView1[2, r].Value = (int )( r * 314.345 + 1231542f);

        }

显然 none 是你将如何做到的; - )

答案 1 :(得分:1)

有不同的方法。以下是我要考虑的三个:

  1. :after事件中自行绘制单元格(请参阅stackoverflow
  2. 自己绘制图像并将其指定给图像列(请参阅stackoverflow
  3. 使用自己的编辑器(请参阅msdn)创建自己的列类型,该编辑器关注绘图
  4. 但是在所有这三个选项中你必须用GDI +绘制圆圈,所以它们彼此非常接近。

    我会选择3,因为它似乎是我最干净的方法,并且该列可以轻松地在其他网格中重复使用。 “干净”是指绘制圆圈的代码位于列实现中,而不是您对网格事件做出反应的表单(或任何其他位置)。