una - formato columna datagridview c#
El formato de Culture Culture no se aplica a la Columna DataGridView (1)
no necesita un BindingSource
para listar todas las filas, solo
dataGridView1.DataSource = dataTable
,
y como está usando una DataTable
, elimine esta parte
dataGridView1.Columns ["ColB"]. DefaultCellStyle.Format = String.Format ("c");
e intente utilizar el evento CellFormatting
.
private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (e.ColumnIndex == 1) //Column ColB
{
if (e.Value != null)
{
e.CellStyle.Format = "c";
}
}
}
Espero que ayude :)
Tengo 2 DataGridViews (DGV), y en ambas tengo columnas de moneda que quiero formatear. El código que estoy escribiendo parece funcionar en uno, pero no en el otro.
Ambas DGV están configuradas de esta manera: los datos se cargan primero en una DataTable. A BindingSource luego se vincula a este DataTable. Y, por último, los DGV usan este objeto BindingSource para sus datos.
Uso el siguiente código en el evento Load del formulario para personalizar las columnas de moneda de ambos DGV:
dataGridView.Columns[columnIndexHere].DefaultCellStyle.FormatProvider = CultureInfo.GetCultureInfo("de-DE");
dataGridView.Columns[columnIndexHere].DefaultCellStyle.Format = String.Format("c")
Parece formatear las columnas en una DGV, no en la otra. Además, la DGV en la que NO funciona, ni siquiera tiene ese código de funcionalidad en su Formulario principal ... He comprobado el código y las propiedades de la DGV, para ver si estoy cambiando el formato en otro lugar, pero no he encontrado nada ..
La ÚNICA ligera diferencia entre la forma en que los dos datos de carga de la DGV es esa, para la primera DataTable de DGV (en la que el formateo funciona), los datos se cargan a través de una instrucción SELECT (a través de mis propias funciones) ... En la segunda DataTable de DGV (para qué formato NO está funcionando), no cargué datos de DB, y en su lugar simplemente defino manualmente las columnas (en la DataTable), porque en este escenario el usuario necesita ingresar los datos.
¿Alguna pista de por qué el formato no funciona en el segundo DGV?
EDITAR: Agregar más información:
Para demostrar el problema, creé un nuevo proyecto C winforms, agregué solo un DataGridView y agregué el siguiente código al evento Load. Incluso para este código, el formato de moneda NO se está haciendo:
DataTable dataTable = new DataTable();
dataTable.Columns.Add("ColA");
dataTable.Columns.Add("ColB");
dataTable.Columns.Add("ColC");
dataTable.Rows.Add("John", 832.293, "London");
dataTable.Rows.Add("Alice", 32972978.20489, "Atlanta");
dataTable.Rows.Add("Mark", 9184793284739, "Tokyo");
BindingSource bindingSource = new BindingSource();
bindingSource.DataSource = dataTable;
dataGridView1.DataSource = bindingSource;
var format = (NumberFormatInfo)NumberFormatInfo.CurrentInfo.Clone();
format.CurrencySymbol = "Mn. ";
dataGridView1.Columns["ColB"].DefaultCellStyle.FormatProvider = CultureInfo.GetCultureInfo("de-DE");
dataGridView1.Columns["ColB"].DefaultCellStyle.Format = String.Format("c");
Espero que esto ayude a diagnosticar el problema más ...
EDIT 2 : ¡Encontré la solución!
Se agregó la siguiente línea después de definir las dos columnas, y ahora funciona:
qBDFrmDTForDisplay.Columns["Combined Price"].DataType = Type.GetType("System.Decimal");