我想在DataGirdViewImageColumn
中将多个图像添加到一个单元格中你可以很容易地看到五个不同颜色的圆圈,起初,我已经尝试过编写"•" DataGirdViewTextBoxColumn中的字符,但我无法更改每个字符的颜色,有没有人有任何想法这样做?
非常感谢
答案 0 :(得分:1)
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)
有不同的方法。以下是我要考虑的三个:
:after
事件中自行绘制单元格(请参阅stackoverflow)但是在所有这三个选项中你必须用GDI +绘制圆圈,所以它们彼此非常接近。
我会选择3,因为它似乎是我最干净的方法,并且该列可以轻松地在其他网格中重复使用。 “干净”是指绘制圆圈的代码位于列实现中,而不是您对网格事件做出反应的表单(或任何其他位置)。