23

我正在尝试在 Visual Studio 2008 中将 DataGridView 的列标题设为粗体。

每次我使用属性框将 ColumnHeadersDefaultCellStyle 更改为 Calibri 9.75pt 粗体时,下次我重新打开保存的表单时,ColumnHeadersDefaultCellStyle 已恢复为 Calibri 9.75,没有粗体。

我的表单字体是没有粗体的 Calibri 9.75,我的默认单元格样式也是如此,但我应该能够用我的 ColumnHeader 样式覆盖默认单元格样式,对吗?

我可以通过在显示表单时设置样式以编程方式解决此问题,但我们希望 Visual Studio 设计器显示粗体标题,因此我们可以根据粗体标题文本占用的空间适当地布局列。

此外,实际的设计器文件指定 ColumnHeadersDefaultCellStyle 为粗体,即使设计器界面显示它不是粗体。

dataGridViewCellStyle1.Font = new System.Drawing.Font("Calibri", 9.75F,  
    System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.WindowText;
dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight;
dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True;

this.receiptDetailView.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1;
4

13 回答 13

25

您是否尝试过检查EnableHeadersVisualStyles值?

根据MSDN

如果启用了视觉样式并且 EnableHeadersVisualStyles 设置为 true,则除 TopLeftHeaderCell 之外的所有标题单元格都使用当前主题进行绘制,并且 ColumnHeadersDefaultCellStyle 值将被忽略。

于 2012-08-05T12:51:29.087 回答
25

这是一个错误,尽管微软可能会尝试将其称为一项功能。仅当 EnableHeadersVisualStyles 设置为 TRUE 时,DataGridView 标题单元格才应该继承当前主题,如果设置为 false,则使用 ColumnHeaderDefaultCellStyles 中的设置。但是 DGV 会忽略 EnableHeadersVisualStyles 并始终继承它所在的父容器的字体。

rutlean 和 Nico Engler 的建议都有效。这是我一直以来的标准做法:将您的 DGV 放在面板中(根据您的应用程序,您可能希望将 Dock 属性设置为填充。然后将面板的字体设置为您想要的设置。您的 DGV 现在将始终继承那个设置。

于 2013-09-19T12:24:33.173 回答
3

我找到了一种解决方法,只需使用以下代码编辑 XXXX.Designer.cs 就可以了。

this.receiptDetailView.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1;
this.receiptDetailView.ColumnHeadersDefaultCellStyle.Font = new System.Drawing.Font("Calibri", 9.75F, System.Drawing.FontStyle.Bold);
于 2012-08-07T07:15:24.127 回答
2

似乎这是一个错误,但我不确定它为什么会发生。我已经以各种可能的方式对其进行了测试,并且该值被父控件值覆盖,无论它是否设置。这与所有其他 WinForms(或任何其他 UI 框架)控件的工作方式相反,并且没有任何意义。我还测试了各种其他控件,但没有发现发生这种情况的另一种情况。

ColumnHeadersDefaultCellStyle Font 仅在父控件(本例中为表单)上未设置 Font 属性时才重要。

我正在为最受支持的答案提供赏金,但这不是这里发生的事情。

我一直在使用的“解决方案”是在表单加载事件中再次设置字体,但这不是一个完美的解决方案,因为这样的代码不属于那里。

于 2012-08-07T09:23:57.447 回答
2

我遇到了同样的问题。但是,我的 dataGridView 位于 groupbox 中。在 VS 2010 重新启动时,dataGridView 字体将始终是 groupBox 设置的任何内容。绝对是我想要的错误。

于 2013-02-18T23:47:15.887 回答
2

我通过添加框架解决了这个问题。对我来说,datagridview 位于 groupbox 内(尽管其他一些容器类型也是如此)。

通过在 groupbox 内放置一个面板来解决,为该面板设置适当的字体,将 datagridview 放在该面板内,默认情况下它继承字体。

我正在使用 VS2010

于 2013-07-17T16:53:40.143 回答
1

答案其实很简单。

您将字体样式设置为 Form1 [Arial; 8,25pt]。让我们看看设计师:

private void InitializeComponent()
    {
        System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle();
        this.dataGridView1 = new System.Windows.Forms.DataGridView();
        this.Column1 = new System.Windows.Forms.DataGridViewTextBoxColumn();
        this.Column2 = new System.Windows.Forms.DataGridViewTextBoxColumn();
        this.Column3 = new System.Windows.Forms.DataGridViewTextBoxColumn();
        ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit();
        this.SuspendLayout();
        // 
        // dataGridView1
        // 
        dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
        dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Control;
        dataGridViewCellStyle1.Font = new System.Drawing.Font("Calibri", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
        dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.WindowText;
        dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight;
        dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
        dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
        this.dataGridView1.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1;
        this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
        this.dataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
        this.Column1,
        this.Column2,
        this.Column3});
        this.dataGridView1.EnableHeadersVisualStyles = false;
        this.dataGridView1.Location = new System.Drawing.Point(49, 62);
        this.dataGridView1.Name = "dataGridView1";
        this.dataGridView1.Size = new System.Drawing.Size(443, 309);
        this.dataGridView1.TabIndex = 0;
        // 
        // Column1
        // 
        this.Column1.HeaderText = "Column1";
        this.Column1.Name = "Column1";
        // 
        // Column2
        // 
        this.Column2.HeaderText = "Column2";
        this.Column2.Name = "Column2";
        // 
        // Column3
        // 
        this.Column3.HeaderText = "Column3";
        this.Column3.Name = "Column3";
        // 
        // Form1
        // 
        this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 14F);
        this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
        this.ClientSize = new System.Drawing.Size(546, 457);
        this.Controls.Add(this.dataGridView1);
        this.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
        this.Name = "Form1";
        this.Text = "Form1";
        this.Load += new System.EventHandler(this.Form1_Load);
        ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit();
        this.ResumeLayout(false);

    }

现在您可以看到,您的 Datagridview 标头的字体设置已保存。但是,之后出现了表单的字体设置,最终覆盖了 Datagridview 字体设置。

我的建议是将表单字体设置恢复为默认值。

于 2012-08-07T08:48:16.423 回答
1

使用此代码

dataGridView1.EnableHeadersVisualStyles = false;
dataGridView1.SelectionBackColor = System.Drawing.SystemColors.Highlight;
于 2012-11-08T09:34:03.077 回答
1

试试这个:

DataGridView1.ColumnHeadersDefaultCellStyle.Font = new Font("Calibri", 9.75F, FontStyle.Bold);       
于 2018-03-17T09:33:39.283 回答
1

这是一个错误,即使在 .net 4.6 中仍然存在,问题是ColumnHeadersDefaultCellStyle字体总是被它的Parent字体覆盖,所以我想出了一个解决方法:

首先,您需要将DataGridView添加到自己的Panel中,Panel 将在这里起到屏蔽作用,我相信您需要将 DataGridView 的 Dock 属性设置为 Fill。

其次,您需要将以下代码添加到ColumnHeadersDefaultCellStyleChanged事件中。

 If Parent IsNot Nothing Then
       Parent.Font = ColumnHeadersDefaultCellStyle.Font
  End If
于 2019-03-16T01:29:07.463 回答
0

我今天遇到了同样的问题,似乎 DataGridView 的 ColumnHeadersDefaultCellStyle 被它所属表单的字体样式覆盖。

作为解决方案,我将表单字体的 GdiCharSet 参数设置为 0。完成后,不会覆盖 ColumnHeadersDefaultCellStyle 的字体。

我在 VS 2010 和 Window 8 上。

于 2013-05-09T10:14:48.450 回答
0

我知道这个话题很老,但是我在 VS 2015 中遇到了同样的问题,ColumnDefaultHeadersCellStyle 字体大小总是恢复到 10pt(我需要它是 14pt)。我可以通过首先更改字体本身来解决这个问题,然后我可以更改字体大小。

我最初使用的字体是 SEGOE UI SEMIBOLD,我将其更改为 SEGOE UI 并且能够更改大小。我还没有研究为什么使用半粗体版本会阻止我改变大小。此外,在启用 VisualStyles 并将 EnableHeadersVisualStyles 设置为 true 的情况下,此方法对我有用。

如果有人仍然遇到此问题,我的建议是尝试更改为另一种字体。

于 2018-04-16T21:54:25.170 回答
0

你可以试试;

Private Sub DgvListeFt_CellPainting(sender As Object, e As DataGridViewCellPaintingEventArgs) Handles DgvListeFt.CellPainting
    Call KolonBaslikDGV(sender, e)
End Sub
Sub KolonBaslikDGV(ByVal S As Object, ByVal E As DataGridViewCellPaintingEventArgs)
    E.PaintBackground(E.CellBounds, True)
    If E.RowIndex = -1 Then
        If E.Value Is Nothing Then
            E.Handled = True
            Return
        End If
        E.Handled = True

        Dim headerFont = New Font("Ariel", 9, FontStyle.Regular)
        Dim myBounds As Rectangle = E.CellBounds
        myBounds.X = E.CellBounds.X + 4
        Dim sf = New StringFormat With {.Alignment = StringAlignment.Near,
                                        .LineAlignment = StringAlignment.Center}
        E.Graphics.DrawString(E.Value.ToString, headerFont, Brushes.MediumVioletRed, myBounds, sf)
        headerFont.Dispose()
        sf.Dispose()
    End If
End Sub
于 2021-03-29T23:48:10.117 回答