Здравствуйте. Вывожу в таблицу значения из базы данных. И некоторые из этих значений являются битовыми(1 или 0), и чтобы название столбца не занимало столько места в ширину, можно ли как-нибудь названия некоторых столбцов записывать вертикально? Использую DataGridView
, можно и ListView
, это не принципиально.
Нашел вот такое решение, которое нужно повесить на событие Cell PaintingЖ
StringFormat l_objformat = new StringFormat();
///////////////////////////////////////////////////////////////
if (e.RowIndex == -1 && e.ColumnIndex > -1)
{
Rectangle r2 = e.CellBounds;
r2.Y += e.CellBounds.Height / 2;
r2.Height = e.CellBounds.Height / 2;
e.PaintBackground(r2, true);
e.PaintContent(r2);
//////////////////////////////////////////////////////////////////
e.PaintBackground(e.ClipBounds, true);
Rectangle rect = this.dataGridView1.GetColumnDisplayRectangle (e.ColumnIndex, true);
Size titleSize = TextRenderer.MeasureText(e.Value.ToString(), e.CellStyle.Font);
if (this.dataGridView1.ColumnHeadersHeight < titleSize.Width)
this.dataGridView1.ColumnHeadersHeight = titleSize.Width;
rect.X += e.CellBounds.Width/2;
rect.Y +=dataGridView1.ColumnHeadersHeight/2;
l_objformat.FormatFlags = StringFormatFlags.DirectionVertical;
e.Graphics.DrawString(e.Value.ToString(), e.CellStyle.Font, Brushes.Red, rect, l_objformat);
e.Handled = true;//This is required, else the original painting of the data grid view overwrites the changes.
}
В DataGridView
вешаем на событие CellPainting
следующую обработку (параметры отрисовки можно менять - цвет, толщина, шрифт и т.д.):
private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
if (e.RowIndex == -1 && e.ColumnIndex < dataGridView1.Columns.Count)
{
e.PaintBackground(e.CellBounds, true);
e.Graphics.TranslateTransform(e.CellBounds.Left, e.CellBounds.Bottom);
e.Graphics.RotateTransform(270);
e.Graphics.DrawString(e.FormattedValue?.ToString(), e.CellStyle.Font, Brushes.Black, 5, 5);
e.Graphics.ResetTransform();
e.Handled = true;
dataGridView1.ColumnHeadersHeight = 50;
}
}
В конструктор формы добавить строку (чтобы высота колонки менялась):
dataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing;
В результате будет как-то так (заранее у колонок задал Width = 25 в визуальном редакторе):
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
UserControl2xaml типа Controls:MetroWindow ( MahApps