visual studio propiedades form ejemplos docs winforms visual-studio visual-studio-2008 datagridview

winforms - propiedades - datagridview visual studio 2017



¿Por qué mi ColumnHeadersDefaultCellStyle sigue siendo restablecido en el diseñador de Visual Studio? (12)

Estoy tratando de poner en negrita los encabezados de columna de mi DataGridView, en Visual Studio 2008.

Cada vez que cambio mi ColumnHeadersDefaultCellStyle a Calibri 9.75pt en negrita, usando el cuadro de propiedades, la próxima vez que vuelva a abrir el formulario guardado, ColumnHeadersDefaultCellStyle ha vuelto a Calibri 9.75 sin negrita.

La fuente de mi formulario es Calibri 9.75 sin negrita, al igual que mi estilo de celda predeterminado, pero debería poder anular el estilo de celda predeterminado con mi estilo ColumnHeader, ¿verdad?

Puedo resolver este problema programáticamente estableciendo el estilo cuando se muestra el formulario, pero nos gustaría que el diseñador de Visual Studio muestre los encabezados en negrita, para que podamos diseñar las columnas de manera adecuada para el espacio ocupado por el texto del encabezado en negrita.

Además, el archivo del diseñador real especifica que ColumnHeadersDefaultCellStyle está en negrita, aunque la interfaz del diseñador dice que no está en negrita.

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;


¿Ha intentado verificar el valor de EnableHeadersVisualStyles ?

Según MSDN :

Si los estilos visuales están habilitados y EnableHeadersVisualStyles se establece en verdadero, todas las celdas del encabezado, excepto el TopLeftHeaderCell, se pintan con el tema actual y se ignoran los valores de ColumnHeadersDefaultCellStyle.


Encontré una solución alternativa en la que editar el XXXX.Designer.cs con el siguiente código hace el truco.

this.receiptDetailView.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1; this.receiptDetailView.ColumnHeadersDefaultCellStyle.Font = new System.Drawing.Font("Calibri", 9.75F, System.Drawing.FontStyle.Bold);


Es un error, aunque Microsoft probablemente trataría de llamarlo una característica. Las celdas del encabezado de DataGridView se supone que heredan el tema actual solo si EnableHeadersVisualStyles está establecido en TRUE, y usan la configuración en ColumnHeaderDefaultCellStyles si es falso. Pero el DGV ignora EnableHeadersVisualStyles y siempre hereda la fuente del contenedor primario en el que reside.

Las sugerencias de rutlean y de Nico Engler funcionarán. Esto es lo que siempre hago como práctica estándar: coloque su DGV en un panel (dependiendo de su aplicación, es posible que desee configurar la propiedad del Dock para que se llene. Luego, configure la fuente del Panel a la configuración deseada. Su DGV ahora siempre heredará esa configuración


Este es un error y aún existe en .net 4.6, el problema es que la fuente ColumnHeadersDefaultCellStyle siempre se sobrescribe con su fuente Parent, así que descubrí una solución para esto:

Primero debe agregar su DataGridView a un Panel propio, el Panel funcionará aquí como un escudo y creo que necesita configurar la propiedad Dock de DataGridView para que se llene.

En segundo lugar, debe agregar el siguiente código en el evento ColumnHeadersDefaultCellStyleChanged .

If Parent IsNot Nothing Then Parent.Font = ColumnHeadersDefaultCellStyle.Font End If


La respuesta es en realidad bastante simple.

Establece un estilo de fuente en Form1 [Arial; 8,25pt]. Veamos al diseñador:

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

Ahora, como puede ver, se guardó su configuración de fuente para el encabezado de Datagridview. Pero aún así, la configuración de fuente para su formulario apareció después de eso, que eventualmente anula la configuración de fuente Datagridview.

Mi consejo es devolver la configuración de la fuente del formulario a la predeterminada.


Me encontré con este mismo problema. Sin embargo, mi dataGridView se encuentra en un cuadro de grupo. Al reiniciar VS 2010, las fuentes dataGridView siempre serán lo que esté configurado para el groupBox. Definitivamente un error que me gustaría.


Parece que esto es un error, aunque no estoy seguro de por qué sucede. Lo he probado de todas las formas posibles y el valor del control principal lo reemplaza independientemente de si está configurado o no. Esto es lo contrario de cómo funcionan todos los demás WinForms (o cualquier otro marco UI), y no tiene ningún sentido. También he probado otros controles y no he encontrado otro caso en el que esto ocurra.

La fuente ColumnHeadersDefaultCellStyle solo importa si la propiedad Font no está establecida en el control principal (formulario en este caso).

Estoy dando la recompensa a la respuesta más votada, pero eso no es lo que está pasando aquí.

La "solución" a esto que he estado usando es configurar la fuente nuevamente en el evento de carga de formulario, sin embargo, esta no es una solución perfecta ya que dicho código no pertenece a ese lugar.


Prueba esto:

DataGridView1.ColumnHeadersDefaultCellStyle.Font = new Font("Calibri", 9.75F, FontStyle.Bold);


Resolví este problema agregando un marco. Para mí, el datagridview estaba dentro de un cuadro de grupo (aunque algunos otros tipos de contenedores hicieron lo mismo).

Resuelto colocando un panel dentro del cuadro de grupo, establezca la fuente apropiada para ese panel, coloque la vista de datos en ese panel y, por defecto, hereda las fuentes.

Estoy usando VS2010


Sé que este tema es antiguo, sin embargo, tuve el mismo problema en VS 2015 con el tamaño de fuente ColumnDefaultHeadersCellStyle siempre volviendo a 10 puntos (necesitaba que fuera 14 puntos). Pude arreglar esto cambiando primero la fuente, lo que me permitió cambiar el tamaño de la fuente.

La fuente que estaba usando originalmente era SEGOE UI SEMIBOLD, que cambié a solo SEGOE UI y pude cambiar el tamaño. No he investigado por qué el uso de la versión semibold me impidió cambiar el tamaño. Además, este método me ha funcionado con VisualStyles habilitados y EnableHeadersVisualStyles establecido en true.

Si alguien sigue teniendo este problema, mi sugerencia sería intentar cambiar a otra fuente.


Tuve el mismo problema hoy y parecía que el estilo de fuente del formulario al que pertenece sobrescribe el estilo ColumnHeadersDefaultCellStyle de DataGridView.

Como solución, establezco el parámetro GdiCharSet de la fuente del formulario en 0. Una vez hecho esto, la fuente de ColumnHeadersDefaultCellStyle no se sobrescribirá.

Estoy en VS 2010 y Windows 8.


Usa este codigo

dataGridView1.EnableHeadersVisualStyles = false; dataGridView1.SelectionBackColor = System.Drawing.SystemColors.Highlight;