2012-01-23 14 views
5

Tengo una datagridview de datos enlazados. En él tengo una columna que tiene valores NULOS y 1-12. ¿Cómo puedo en tiempo de ejecución hacer que datagridview convierta el 1 en enero y mostrarlo en la celda? Y el NULL en otra cadena predefinida?Databound DataGridView Formato de celda Int a Month Conversión de nombre

Intenté mirar el formato de la celda, lo cambié a personalizado, luego puse "MMM" pero no funcionó y se mostró "MMM" en la celda real.

Por favor ayuda.

EDITAR: Its winforms C# 4.0, el campo está vinculado al campo Int de una entidad en EF. Y no hay necesidad de cultura sensible, el inglés está bien.

EDIT: Intenté {0: MMM} no funcionó, solo se muestra {X: MMM} en la celda donde X es int.

Algunas capturas de pantalla:

format

result

+0

¿Necesita que esto sea multilingüe/sensible a la cultura? Además, ¿esto está actualmente ligado a un 'int'? ¿tipo? – ChrisBD

+0

¿Es esto ganar formas? o ASP.NET? – atoMerz

Respuesta

1

La forma más sencilla de ir sobre esto es crear una separada propiedad para enlace de datos, como DisplayMonth que contiene la lógica que desea, y luego enlaza la celda a esa propiedad en su lugar. ¿Estás usando clases generadas por EF? Si es así, puede agregar esta propiedad a una clase parcial para ampliar la generada por EF.

Se vería algo como:

public string DisplayMonth 
{ 
    get { return ConvertToString(this.Date); //TODO: create ConvertToString method } 
    set { return this.Date = ConvertFromString() //TODO: create ConvertFromString method ; } 
} 

Como ya se mencionó, también se puede utilizar el evento CellFormatting, sin embargo, tendrá que volver a ponerlo en práctica en todas partes este objeto se utiliza en una cuadrícula.

4

Si WinForms Prueba esto:

Uso Column.DefaultCellStyle.Format la propiedad o la pusieron en designer.

Este post debería aclarar cualquier duda:

Customize format of DateTime string in WPF and WinForm data binding


PROBLEMA: formato de cadenas de máscaras sólo funcionará con los valores de fecha y hora. Tiene int y en este caso creo que tendrá que escribir una función de conversión ...

Comprobar esto:

DataGridView.CellFormatting Event

+0

Sí, traté de configurarlo en {0: MMM} en la propiedad de Formato en el diseñador, acaba de mostrar {X: MMM} en cada celda, donde X = int. – sprocket12

+0

Sé sobre el evento de formato de celda, esperaba una forma más simple ya que tengo que mostrar esto en muchas cuadrículas. Pero supongo que no tengo una opción. También estaba pensando que mi propio formato sería menos eficiente que el formato integrado de la cuadrícula. – sprocket12

+0

¿No puedes devolver un valor de fecha y hora en esta columna? Sería realmente simple si eso fuera posible ... :) De esta forma puede usar la máscara de formato como se esperaba mostrando solo el nombre del mes. –