Границы, которые мы видим в указанном столбце вопроса, не являются границами ячеек.Границами ячеек являются те точечные линии между рядами.Поэтому настройка 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;
};