Вероятно, вы ищете событие dataGridView_CellPainting
.
Здесь вы можете нарисовать строку с требуемым содержимым и использовать различные встроенные вспомогательные функции для рисования других вещей, которые должна отображать ячейка..
Когда закончите, установите e.Handled = true;
, чтобы предотвратить перерисовку ваших вещей при обычной рисовании.
Пример, который отображает флажки слева и текст справа:
private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
if ( e.RowIndex >= 0 && e.ColumnIndex == 0)
{
Brush br = e.State.HasFlag(DataGridViewElementStates.Selected) ?
SystemBrushes.HighlightText : SystemBrushes.WindowText;
Font font = dataGridView1.DefaultCellStyle.Font;
Rectangle r2 = new Rectangle(e.CellBounds.X + 24, e.CellBounds.Y,
e.CellBounds.Width - 24, e.CellBounds.Height);
e.PaintBackground(e.CellBounds, true);
using (StringFormat fmt = new StringFormat()
{ LineAlignment = StringAlignment.Center})
if (e.Value != null) e.Graphics.DrawString(e.Value.ToString(), font, br, r2, fmt);
e.PaintContent(e.CellBounds);
e.Handled = true;
}
}
Я ленивый и использую магическое число (24
) для смещения, но есть способы определить лучшее значение более гибким способом,если нужно ..
Ячейка выравнивается следующим образом:
dataGridViewCellStyle1.Alignment = DataGridViewContentAlignment.MiddleLeft;
Поскольку флажки DGV не будут верить в их изменения, пока пользователь не покинет ячейку, нам нужно, чтобы это работало должным образом:
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
}
Примечание. Здесь значения ToString
имеют значения True
и False
.Если вы установите флажок, чтобы разрешить третье состояние (ThreeState = true
) будет Checked
, Unchecked
и Indeterminate
.Затем вам нужно проверить их и отобразить нужную вам строку.
Как отмечалось в моем комментарии, вы на самом деле должны разрешить хотя бы одному альтернативному полу и неопределенное состояние;так что CheckBox
не самый лучший вариант.Не забудьте использовать раскрывающийся список!