Вертикальные названия столбцов DataGridView

205
19 мая 2017, 12:35

Здравствуйте. Вывожу в таблицу значения из базы данных. И некоторые из этих значений являются битовыми(1 или 0), и чтобы название столбца не занимало столько места в ширину, можно ли как-нибудь названия некоторых столбцов записывать вертикально? Использую DataGridView, можно и ListView, это не принципиально.

Answer 1

Нашел вот такое решение, которое нужно повесить на событие 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.
            }
Answer 2

В 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 в визуальном редакторе):

READ ALSO
Зависает программа при вставки в фрейм xaml

Зависает программа при вставки в фрейм xaml

UserControl2xaml типа Controls:MetroWindow ( MahApps

227
WPF C#. Привязка к Point

WPF C#. Привязка к Point

Есть следующая разметка:

310
Рефакторинг XAML-разметки

Рефакторинг XAML-разметки

Читаю Роберта Мартина и пытаюсь постичь все тонкости рефакторинга

189