Я пытаюсь вычеркнуть весь ряд в Datagridview. Вот чем я сейчас занимаюсь:
DataGridViewCellStyle style = new DataGridViewCellStyle();
style.Font = new Font(dgview.Font.OriginalFontName, 7, FontStyle.Strikeout);
dgview.Rows[dgview.RowCount - 1].DefaultCellStyle.ApplyStyle(style);
Этот подход выделяет только часть ячеек, в которых есть какой-либо текст. То, что я хотел бы, это иметь непрерывный зачеркнутый, то есть одну линию, проходящую через ряд.
Буду признателен за любую помощь в этом. Заранее спасибо.
РЕДАКТИРОВАТЬ: увидел это как вероятный ответ в другом вопросе: «Вероятно, самый простой способ сделать это, если все строки имеют одинаковую высоту, это применить к нему фоновое изображение, которое просто имеет большую линию через центр, тот же цвет, что и у теста. "
Если все остальное не поможет, я бы пошел с этим. Но разве нет ничего проще?
EDIT2: Реализовано предложение Марка с небольшой настройкой. Свойство cellbound не работает для меня должным образом, поэтому я решил получить местоположение, используя rowindex и rowheight.
private void dgv_CellPainting(object sender,DataGridViewCellPaintingEventArgs e)
{
if (e.RowIndex != -1)
{
if (dgv.Rows[e.RowIndex].Cells["Strikeout"].Value.ToString() == "Y")
{
e.Paint(e.CellBounds, e.PaintParts);
e.Graphics.DrawLine(new Pen(Color.Red, 2), new Point(e.CellBounds.Left, gridHeaderHeight+ e.RowIndex * rowHeight+ rowHeight/2),
new Point(e.CellBounds.Right, gridHeaderHeight+ e.RowIndex * rowHeight+ rowHeight/2));
e.Handled = true;
}
}
}