Изменение выравнивания текста заголовков DataGridView и размер шрифта

Я пытаюсь изменить выравнивание текста и размер шрифта DataGridView. Все столбцы создаются программно во время выполнения. Вот код..

private void LoadData()
{
    dgvBreakDowns.ColumnCount = 5;
    dgvBreakDowns.Columns[0].Name = "Breakdown No";
    dgvBreakDowns.Columns[1].Name = "Breakdown Type";
    dgvBreakDowns.Columns[2].Name = "Machine Type";
    dgvBreakDowns.Columns[3].Name = "Date";
    dgvBreakDowns.Columns[4].Name = "Completed";

    dgvBreakDowns.Columns[4].Visible = false;

    foreach (DataGridViewHeaderCell header in dgvBreakDowns.Rows)
    {
        header.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
        header.Style.Font = new Font("Arial", 12F, FontStyle.Bold, GraphicsUnit.Pixel);
    }
}

Этот метод LoadData() вызывается в конструкторе формы. Столбцы создаются, но их изменения Заголовков не применяются. Я думаю, что из-за ошибки в моей петле foreach (DataGridViewHeaderCell header in dgvBreakDowns.Rows)? Я не уверен. Я попытался изменить его на dgvBreakDowns.Columns, и я получаю InvalidCastException. Как я могу выбрать ячейки заголовка для применения этих изменений?

У меня другая проблема. Когда я запускаю программу, она выглядит так.

enter image description here

Обратите внимание, что первая ячейка выбрана по умолчанию, поэтому она отображается синим цветом. Конечно, это ничего не влияет, но это выглядит несколько уродливым и неопрятным. Можно ли остановить его от выбора ячейки?

Ответы

Ответ 1

Попробуйте (обратите внимание, что я использую столбцы здесь, а не строки):

foreach(DataGridViewColumn col in dgvBreakDowns.Columns)
{
    col.HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
    col.HeaderCell.Style.Font = new Font("Arial", 12F, FontStyle.Bold, GraphicsUnit.Pixel);
}

Что касается отмены выбора ячейки, попробуйте dgvBreakDowns.ClearSelection()

Ответ 2

или просто попробуйте следующее:

dgvBreakDowns.Columns[4].HeaderCell.Style.Alignment = DataGridViewContentAlignment.BottomCenter;