Как сделать DataGridViewLinkColumn подчеркиванием и изменить цвет фона
У меня есть DataGridViewLinkColumn.How я могу сделать заголовок (строка = -1) как подчеркивание и изменить его цвет фона
var WarningsColumn = new DataGridViewLinkColumn
{
Name = @"Warnings",
HeaderText = @"Warnings",
DataPropertyName = @"WarningsCount",
AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells,
ReadOnly = true
};
2 ответа
Я думаю, что вы должны добавить пользовательский код в CellPainting
обработчик событий, подобный этому:
Point spot;
private void dataGridView_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
if (e.RowIndex == -1 && e.ColumnIndex > -1)
{
e.Handled = true;
if (e.CellBounds.Contains(spot))//Mouse over cell
{
PaintCellBackground(e.Graphics, Color.Red, e.CellBounds);
}
else //Mouse leave cell
{
PaintCellBackground(e.Graphics, Color.Green, e.CellBounds);
}
StringFormat sf = new StringFormat(){Alignment=StringAlignment.Center, LineAlignment = StringAlignment.Center };
Font f = new Font(e.CellStyle.Font, FontStyle.Underline);
e.Graphics.DrawString(e.Value.ToString(), f, new SolidBrush(e.CellStyle.ForeColor), e.CellBounds, sf);
}
}
private void PaintCellBackground(Graphics g, Color c, Rectangle rect)
{
Rectangle topHalf = new Rectangle(rect.Left, rect.Top, rect.Width, rect.Height / 2);
Rectangle bottomHalf = new Rectangle(rect.Left, topHalf.Bottom, rect.Width, topHalf.Height);
g.FillRectangle(new SolidBrush(Color.FromArgb(150, c)), topHalf);
g.FillRectangle(new SolidBrush(c), bottomHalf);
ControlPaint.DrawBorder(g, rect, Color.Gray, 1, ButtonBorderStyle.Solid,
Color.Gray, 0, ButtonBorderStyle.Solid,
Color.Gray, 1, ButtonBorderStyle.Solid,
Color.Gray, 0, ButtonBorderStyle.Solid);
}
//Reset spot when mouse leave
private void dataGridView_MouseLeave(object sender, EventArgs e)
{
spot = Point.Empty;
}
//Update spot when mouse move
private void dataGridView_MouseMove(object sender, MouseEventArgs e)
{
spot = e.Location;
}
Это выглядит не очень хорошо, но может помочь вам начать, я думаю, что фон по умолчанию лучше. Если это так, вам просто нужно позвонить: e.PaintBackground(e.CellBounds, true);
ОБНОВИТЬ
Пользовательский рисунок должен быть применен к элементу управления DoubleBuffered. Поэтому я думаю, что вы должны создать свой собственный DataGridView следующим образом (это просто немного больше кода):
public class CustomDataGridView : DataGridView {
public CustomDataGridView(){
DoubleBuffered = true;
}
}
Попробуй это:
dataGridView1.EnableHeadersVisualStyles = false;
dataGridView1.ColumnHeadersDefaultCellStyle
= new DataGridViewCellStyle {BackColor = Color.Yellow, Font = new Font(dataGridView1.Font, FontStyle.Underline)};
Из ссылки MSDN на свойство DataGridView.ColumnHeadersDefaultCellStyle:
Если визуальные стили включены, а для параметра EnableHeadersVisualStyles установлено значение true, все ячейки заголовка, кроме TopLeftHeaderCell, окрашиваются с использованием текущей темы, а значения ColumnHeadersDefaultCellStyle игнорируются.
Таким образом, вы можете установить его False
и затем переопределите значения по умолчанию, и тогда вы получите что-то вроде этого (быстрый и грязный тест, чтобы убедиться, что он работает):
Редактировать:
Чтобы применить стиль к одному столбцу, используйте его вместо этого (вы захотите поместить его после кода, в котором вы установили DataSource
из DataGridView
):
dataGridView1.Columns["your_column_name"].HeaderCell.Style
= new DataGridViewCellStyle { BackColor = Color.Yellow, Font = new Font(dataGridView1.Font, FontStyle.Underline) };