我试图在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;
答案 0 :(得分:20)
您是否尝试过检查 EnableHeadersVisualStyles 值?
根据MSDN:
如果启用了视觉样式并且EnableHeadersVisualStyles设置为 true,除了TopLeftHeaderCell之外的所有标题单元格都是使用绘制的 当前主题和ColumnHeadersDefaultCellStyle值是 忽略。
答案 1 :(得分:18)
这是一个错误,尽管微软可能会尝试将其称为一项功能。仅当EnableHeadersVisualStyles设置为TRUE时,DataGridView标头单元才应继承当前主题,如果为false,则使用ColumnHeaderDefaultCellStyles中的设置。但是DGV忽略了EnableHeadersVisualStyles并且总是继承它所在的父容器的字体。
rutlean和Nico Engler的建议都有效。以下是我一直做的标准做法:将DGV放在一个面板中(根据您的应用程序,您可能需要设置Dock属性来填充。然后将Panel的字体设置为您想要的设置。您的DGV现在将始终继承那个设置。
答案 2 :(得分:2)
似乎这是一个错误,但我不确定它为什么会发生。我已经以各种可能的方式对其进行了测试,并且该值被父控件值覆盖,无论它是否被设置。这与其他所有WinForms(或任何其他UI框架)控件的工作方式相反,并且没有任何意义。我还测试过各种其他控件,但没有找到另一种情况。
ColumnHeadersDefaultCellStyle字体仅在父控件(在本例中为窗体)上未设置Font属性时才重要。
我正在给予最值得赞赏的答案,但这不是正在发生的事情。
我一直在使用的“解决方案”是在表单加载事件中再次设置字体,但这不是一个完美的解决方案,因为这样的代码不属于那里。
答案 3 :(得分:2)
我遇到了同样的问题。但是,我的dataGridView位于一个组框中。在重新启动VS 2010时,dataGridView字体将始终是groupBox设置的任何内容。绝对是我想要的错误。
答案 4 :(得分:2)
我通过添加框架解决了这个问题。对我来说,datagridview位于一个组框内(尽管其他一些容器类型也是如此)。
通过将一个面板放在groupbox中,将相应的字体设置到该面板,将datagridview放在该面板中,默认情况下它继承了这些字体。
我正在使用VS2010
答案 5 :(得分:1)
我找到了一种解决方法,只需使用以下代码编辑XXXX.Designer.cs即可。
this.receiptDetailView.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1;
this.receiptDetailView.ColumnHeadersDefaultCellStyle.Font = new System.Drawing.Font("Calibri", 9.75F, System.Drawing.FontStyle.Bold);
答案 6 :(得分: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字体设置。
我的建议是将表单字体设置恢复为默认值。
答案 7 :(得分:1)
使用此代码
dataGridView1.EnableHeadersVisualStyles = false;
dataGridView1.SelectionBackColor = System.Drawing.SystemColors.Highlight;
答案 8 :(得分:0)
今天我遇到了同样的问题,似乎DataGridView的ColumnHeadersDefaultCellStyle被它所属的表单的字体样式覆盖。
作为解决方案,我将表单字体的GdiCharSet参数设置为0.完成后,不会覆盖ColumnHeadersDefaultCellStyle的字体。
我在VS 2010和Window 8上。
答案 9 :(得分:0)
试试这个:
DataGridView1.ColumnHeadersDefaultCellStyle.Font = new Font("Calibri", 9.75F, FontStyle.Bold);
答案 10 :(得分:0)
我知道这个话题很老,但我在VS 2015中遇到了同样的问题,ColumnDefaultHeadersCellStyle字体大小总是恢复到10pt(我需要它是14pt)。我能够通过首先更改字体本身来解决这个问题,然后允许我更改字体大小。
我最初使用的字体是SEGOE UI SEMIBOLD,我更改为SEGOE UI并且能够更改大小。我没有调查过为什么使用semibold版本阻止我改变大小。此外,此方法对我启用了VisualStyles,并且EnableHeadersVisualStyles设置为true。
如果有人仍然遇到此问题,我的建议是尝试更改为其他字体。
答案 11 :(得分:0)
这是一个错误,即使在.net 4.6中也仍然存在,问题是 ColumnHeadersDefaultCellStyle 字体始终被其 Parent 字体覆盖,因此我想出了一个解决方案这个:
首先,您需要将 DataGridView 添加到自己的 Panel ,Panel将在此处用作屏蔽,我相信您需要设置DataGridView的Dock属性填充。
第二,您需要将以下代码添加到 ColumnHeadersDefaultCellStyleChanged 事件中。
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 12 :(得分: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