Заголовок столбца DataGridView для включения текста и флажок

У меня есть два столбца флажков "Построить" и "Опубликовать". Я хочу, чтобы в каждом из заголовков отображались "Build [ ]" и "Publish [ ]", где [] - это флажок, который позволяет пользователю устанавливать или снимать все флажки в соответствующем столбце. ПРИОРИТЕТ: Как я могу достичь этого, не создавая новые классы и не добавляя изображения? ПОСЛЕДНИЙ КУРОРТ: Если это невозможно, можете ли вы помочь мне построить соответствующие классы? Заранее спасибо!

1 ответ

Решение

Вы можете использовать два регулярных CheckBoxes и добавить их в DataGridView:

cbx_Build.Parent = dataGridView1;
cbx_Build.Location = new Point(0, 3);
cbx_Build.BackColor = SystemColors.Window;
cbx_Build.AutoSize = false;

cbx_Publish.Parent = dataGridView1;
cbx_Publish.Location = new Point(0, 3);
cbx_Publish.BackColor = SystemColors.Window;    
cbx_Publish.AutoSize = false;

Чтобы сохранить их в ColumnHeaders, используйте такой код:

dataGridView1.CellPainting += dataGridView1_CellPainting;  


void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
  if (e.ColumnIndex == BuildIndex && e.RowIndex == 0) cbx_Build.Left = e.CellBounds.Left;
  if (e.ColumnIndex == PubIndex && e.RowIndex == 0) cbx_Publish.Left = e.CellBounds.Left;
}

Используйте соответствующие индексы, чтобы соответствовать вашим столбцам и смещениям, чтобы расположить их немного правее, если это необходимо.

Вам нужно будет реализовать свою логику, чтобы предотвратить изменение значений в DGV, как обычно, например, в Validating событие..

Обновить:

Это событие, вероятно, является хорошей или даже лучшей альтернативой, поскольку его не так часто называют; это будет делать, по крайней мере, если вам нужно изменить положение только после того, как пользователь изменит ширину столбца:

private void dataGridView1_ColumnWidthChanged(object sender, DataGridViewColumnEventArgs e)
{
   cbx_Build.Left = dataGridView1.Columns[BuildIndex].HeaderCell.ContentBounds.Left;
   cbx_Publish.Left = dataGridView1.Columns[PubIndex].HeaderCell.ContentBounds.Left;
}

Если столбцы также могут быть удалены, добавлены или переупорядочены, эти события также должны быть записаны в сценарии: ColumnRemoved, ColumnAdded, ColumnDisplayIndexChanged, Все работают с вышеуказанными 2 строчками.

Другие вопросы по тегам