由于各种原因,我使用的是过时的System.Windows.Forms.DataGrid而不是DataGridView,我需要将特定行加粗,而其他行保持不受约束。
行标题文本和单元格都应该是粗体。我假设这是通过某种方式更改字体来完成的。我找到的唯一属性是Font和HeaderFont,但它们更改了整个控件的字体。
答案 0 :(得分:1)
您可以创建新的DataGridColumnStyle
并覆盖其Paint
方法并应用自定义绘制逻辑来自定义单元格绘制。您可以从DataGridTextBoxColumn
派生并覆盖此Paint
的重载。
您可以使用rowNum
参数,其中包含您要绘制的行号。您还可以使用source
参数提取单元格的值,以决定如何渲染单元格。
public class MyDataGridTextBoxColumn : DataGridTextBoxColumn
{
protected override void Paint(Graphics g, Rectangle bounds, CurrencyManager source,
int rowNum, Brush backBrush, Brush foreBrush, bool alignToRight)
{
if (rowNum == 1) /*Specific row index*/
{
var value = this.PropertyDescriptor.GetValue(source.List[rowNum]);
var text = string.Format("{0}", value);
Rectangle rect = bounds;
using (var format = new StringFormat())
{
if (alignToRight)
format.FormatFlags |= StringFormatFlags.DirectionRightToLeft;
format.Alignment = (this.Alignment == HorizontalAlignment.Left) ?
StringAlignment.Near :
((this.Alignment == HorizontalAlignment.Center) ?
StringAlignment.Center : StringAlignment.Far);
format.FormatFlags |= StringFormatFlags.NoWrap;
g.FillRectangle(backBrush, rect);
rect.Offset(0, 2);
rect.Height -= 2;
var font = new Font(this.DataGridTableStyle.DataGrid.Font, FontStyle.Bold);
g.DrawString(text, font, foreBrush, rect, format);
}
}
else
base.Paint(g, bounds, source, rowNum, backBrush, foreBrush, alignToRight);
}
}
以下是用法:
var dt = new DataTable();
dt.Columns.Add("A");
dt.Columns.Add("B");
dt.Rows.Add("1", "11");
dt.Rows.Add("2", "22");
dt.Rows.Add("3", "33");
var dg = new DataGrid();
dg.Dock = DockStyle.Fill;
var ts = new DataGridTableStyle();
ts.GridColumnStyles.Add(new MyDataGridTextBoxColumn()
{ MappingName = "A", HeaderText = "A" });
ts.GridColumnStyles.Add(new MyDataGridTextBoxColumn()
{ MappingName = "B", HeaderText = "B" });
dg.TableStyles.Add(ts);
this.Controls.Add(dg);
dg.DataSource = dt;
dg.BringToFront();