Установить стиль границы ячейки DataGridView только для выбранного столбца - PullRequest
0 голосов
/ 16 декабря 2018

Я хотел бы сделать этот стиль рамки для ячеек 3-го столбца.
Может ли кто-нибудь помочь мне сделать это в DataGridView.

Я говорю о выделенной детали с красным прямоугольником:

Red rectangle

1 Ответ

0 голосов
/ 16 декабря 2018

Границы, которые мы видим в указанном столбце вопроса, не являются границами ячеек.Границами ячеек являются те точечные линии между рядами.Поэтому настройка AdvancedBorderStyle в методе CellPaint не сильно поможет.

Вам нужно выполнить некоторые настройки и немного покрасить.

Вот некоторые настройки, которые помогут вам достичь такого стиля для строк и ячеек:

  • Настройка отступа для столбца
  • Настройка высоты строки
  • Установка стилей границ ячейки в none
  • Удаление заголовков строк
  • Обработка CellPaint событие:
    • Рисование ячейки, но содержимого.
    • Рисование пунктирной границы сверхуи нижняя часть строк.
    • Нормальное окрашивание содержимого ячейки или в виде текстового поля для определенного столбца.

Пример

var specificColumn = 1;

dataGridView1.Columns[specificColumn].DefaultCellStyle.Padding = new Padding(10);
dataGridView1.RowTemplate.Height = 45;
dataGridView1.CellBorderStyle = DataGridViewCellBorderStyle.None;
dataGridView1.RowHeadersVisible = false;

dataGridView1.CellPainting += (obj, args) =>
{
    if (args.ColumnIndex < 0 || args.RowIndex < 0)
        return;
    args.Paint(args.CellBounds, DataGridViewPaintParts.All & 
        ~DataGridViewPaintParts.ContentForeground);
    var r = args.CellBounds;
    using (var pen = new Pen(Color.Black))
    {
        pen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dot;
        args.Graphics.DrawLine(pen, r.Left, r.Top, r.Right, r.Top);
        args.Graphics.DrawLine(pen, r.Left, r.Bottom, r.Right, r.Bottom);
    }
    r.Inflate(-8, -8);
    if (args.ColumnIndex == specificColumn)
        TextBoxRenderer.DrawTextBox(args.Graphics, r, $"{args.FormattedValue}",
            args.CellStyle.Font, System.Windows.Forms.VisualStyles.TextBoxState.Normal);
    else
        args.Paint(args.CellBounds, DataGridViewPaintParts.ContentForeground);
    args.Handled = true;
};

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...