2012-01-23 16 views
5

Ho una vista dati del database. In esso ho una colonna che ha valori NULL e 1-12. Come posso runtime rendere il datagridview trasformare il 1 in gennaio e visualizzarlo nella cella? E il NULL in un'altra stringa predefinita?Databound DataGridView Formato cella Conversione da Int a mese Nome

Ho provato a esaminare il formato della cella, l'ho modificato in personalizzato, quindi ho inserito "MMM" ma non ha funzionato e visualizzato "MMM" nella cella attuale.

Per favore aiuto.

MODIFICA: Il suo winforms # 4.0, il campo è legato al campo Int da un'entità in EF. E non c'è bisogno di cultura sensibile, l'inglese va bene.

EDIT: Ho provato {0: MMM} non ha funzionato, appena visualizzato {X: MMM} nella cella in cui X è int.

Alcuni screenshots:

format

result

+0

Avete bisogno che questo sia multilingue/sensibile alla cultura? Inoltre, questo è attualmente legato a un 'int?' genere? – ChrisBD

+0

Queste forme di vincita? o ASP.NET? – atoMerz

risposta

1

Il modo più semplice di andare su questo è quello di creare un separato proprietà per il databinding, ad esempio DisplayMonth che contiene la logica desiderata, quindi associare la cella a quella proprietà. Stai usando classi generate da EF? In tal caso, è possibile aggiungere questa proprietà a una classe parziale per estendere quella generata da EF.

Sarebbe qualcosa di simile:

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

Come già accennato, è anche possibile utilizzare l'evento CellFormatting, tuttavia sarà necessario re-implementare ovunque questo oggetto viene utilizzato in una griglia.

4

Se WinForms provare questo:

Usa Column.DefaultCellStyle.Format proprietà o impostarlo in designer.

Questo post dovrebbe chiarire ogni dubbio:

Customize format of DateTime string in WPF and WinForm data binding


PROBLEMA: stringa di formattazione maschere funziona solo con i valori DateTime. Hai int e in questo caso penso che dovrete scrivere una funzione convertitore ...

Controllare questo:

DataGridView.CellFormatting Event

+0

Sì, ho provato a impostarlo su {0: MMM} nella proprietà Format in Designer, ha appena visualizzato {X: MMM} in ogni cella, dove X = int. – sprocket12

+0

Conosco l'evento Cell Formatting, speravo in un modo più semplice visto che devo visualizzarlo in molte griglie. Ma immagino di non avere un'opzione. Inoltre pensavo che la mia formattazione sarebbe stata meno efficiente di quella formattata dalla griglia stessa. – sprocket12

+0

Non puoi restituire un valore DateTime in questa colonna? Sarebbe davvero semplice se fosse possibile ... :) In questo modo è possibile utilizzare la maschera di formato come previsto, mostrando solo il nome del mese. –