设置DataGridView单元格中第一个字符的颜色

时间:2016-10-13 12:49:21

标签: c# winforms datagridview

我是Winform C#的新手。我有一个问题:有没有办法为DataGridView的单元格中的第一个字符设置颜色? 谢谢!

1 个答案:

答案 0 :(得分:0)

处理CellPainting事件是正确的方法。以下是将您的需求应用于除网格列标题之外的特定单元格的代码段。

private void DataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
    if (e.Value != null && !string.IsNullOrEmpty(e.Value.ToString()) && e.RowIndex != -1)
    {
        // Current cell pending to be painted.
        var currentCell = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex];
        // Cell that needs to be painted. In this case the first cell of the first row.
        var cellToBePainted = dataGridView1.Rows[0].Cells[0];

        if (currentCell == cellToBePainted)
        {
            using (Brush customColor = new SolidBrush(Color.Red))
            using (Brush cellDefaultBrush = new SolidBrush(e.CellStyle.ForeColor))
            {
                string fullText = e.Value.ToString();
                string firstChar = fullText[0].ToString();
                string restOfTheText = fullText.Substring(1);

                e.PaintBackground(e.CellBounds, true);
                Rectangle cellRect = new Rectangle(e.CellBounds.Location, e.CellBounds.Size);
                Size entireTextSize = TextRenderer.MeasureText(fullText, e.CellStyle.Font);

                Size firstCharSize = TextRenderer.MeasureText(fullText[0].ToString(), e.CellStyle.Font);
                e.Graphics.DrawString(fullText[0].ToString(), e.CellStyle.Font, customColor, cellRect);

                if (!string.IsNullOrEmpty(restOfTheText))
                {
                    Size restOfTheTextSize = TextRenderer.MeasureText(restOfTheText, e.CellStyle.Font);
                    cellRect.X += (entireTextSize.Width - restOfTheTextSize.Width);
                    cellRect.Width = e.CellBounds.Width;
                    e.Graphics.DrawString(restOfTheText, e.CellStyle.Font, cellDefaultBrush, cellRect);
                }

                e.Handled = true;
            }
        }
    }
}