更改DataGridView标题单元格的文本对齐和字体大小

时间:2012-10-19 05:35:34

标签: c# 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);
    }
}

在Form的构造函数中调用此LoadData()方法。列已创建,但其标题更改不适用。 我认为这是因为我的循环中有一个缺陷foreach (DataGridViewHeaderCell header in dgvBreakDowns.Rows)?我不确定。我尝试将其更改为dgvBreakDowns.Columns并获得InvalidCastException。如何选择标题单元格以应用这些更改?

我有另一个小问题。当我运行程序时,它看起来像这样。

enter image description here

请注意,默认情况下会选择第一个单元格,因此它显示为蓝色。当然它不会影响任何东西,但它看起来有点丑陋和不整洁。有可能阻止它选择那样的Cell吗?

4 个答案:

答案 0 :(得分:37)

试试这个(注意我在这里使用的是Columns而不是Rows):

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()

答案 1 :(得分:5)

或者只是试试这个:

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

答案 2 :(得分:1)

您可以使用带有 ColumnHeadersDefaultCellStyle.AlignmentMiddleCenter 作为其值。检查下面的代码:

dataGridView1.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;

答案 3 :(得分:0)

仅供参考;为了使控件正确显示自定义样式,需要考虑一些因素。 在这种情况下有关列标题;但这些确实适用于进一步的自定义:

  • 将“ dataGridView.EnableHeadersVisualStyles”设置为false。
  • 在DatagridView可见后应用样式。
  • 对齐标题列; “ AutoSizeColumnMode ”必须设置为Fill。

确保在控件可见后应用所有自定义样式;您可以使用“ DataGridView_VisibleChanged ”事件。


DataGridView可见更改事件

/// <summary> Occurrs whenever the Control gets visible. </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void DataGridView_VisibleChanged(object sender, EventArgs e)
{
    if (dataGridView.Visible)
    {
        DataGridView_AutoSizeColumn();
        DataGridView_CentreHeaders();
        // Etc...
    }
}

标题列AutoSizeMode

private void DataGridView_AutoSize()
{
   var col = dataGridView.Columns;

   for (int i = 0; i < col.Count; i++)
   {
      if (i == 0) { col[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; }
      if (i == 1) { col[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; }
      // Etc...
    }
}

中心标题列文本和设置字体

/// <summary> Centre Columns Headers. </summary>
private void DataGridView_CentreHeaders()
{
    // Centre Column Cells Content
    dataGridView.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft;

    // Centre (Column and Row) Headers    
    dataGridView.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;

    // Set Font
    dataGridView.ColumnHeadersDefaultCellStyle.Font = new Font("Arial", 11F, FontStyle.Regular, GraphicsUnit.Pixel);
}