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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/12967957/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-10 01:07:57  来源:igfitidea点击:

Changing DataGridView Header Cells' Text Alignment And The Font Size

c#datagridview

提问by Isuru

I'm trying to change the text alignment and the font size of a DataGridView. All the Columns are created programatically at runtime. Here's the code..

我正在尝试更改 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);
    }
}

This LoadData()method is called in the Form's constructor. The Columns are created but their Headers' changes don't apply. I think its because of a flaw in my loop foreach (DataGridViewHeaderCell header in dgvBreakDowns.Rows)?I'm not sure. I tried changing it to dgvBreakDowns.Columnsand I get an InvalidCastException. How can I select the Header Cells to apply those changes?

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

I have another minor issue. When I run the program it looks like this.

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

enter image description here

在此处输入图片说明

Notice the first Cell is selected by default therefore it appears Blue. Sure it doesn't affect anything but it just looks somewhat ugly and untidy. It is possible to stop it from selecting the Cell like that?

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

采纳答案by lc.

Try this (note I'm using Columns here and not 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);
}

As for deselecting the cell, try dgvBreakDowns.ClearSelection()

至于取消选择单元格,请尝试 dgvBreakDowns.ClearSelection()

回答by derHippeChip

or just try this:

或者试试这个:

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

回答by Ricardo Garcia

Just for reference; there are some things to take into consideration in order for the control to show the customized Styles correctly. In this situation regarding Column Headers; but these do apply to further customization:

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

  • Set: "dataGridView.EnableHeadersVisualStyles" to false.
  • Apply styles after the DatagridView is Visible.
  • To align Header Columns; the "AutoSizeColumnMode" must be Set to Fill.
  • 设置:“dataGridView.EnableHeadersVisualStyles”为假。
  • 在 DatagridView 可见后应用样式。
  • 对齐标题列;“ AutoSizeColumnMode”必须设置为填充。

To ensure that all the customized Styles are applied after the Control is Visible; you can use the "DataGridView_VisibleChanged" Event.

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


DataGridView Visible Changed Event


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...
    }
}

Header Columns AutoSizeMode

标题栏 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...
    }
}

Centre Header Columns Text and Set Font

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

/// <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);
}