Formato personalizzato intero come data in datagrid
-
27-10-2019 - |
Domanda
Ho un campo intero nel mio database che contiene un valore della data nel modulo yyyyMMdd
. È possibile analizzarlo come una data nel modulo dd/MM/yyyy
come associato a un datagrid?
Attualmente il campo è vincolato in questo modo:
<asp:boundcolumn datafield="access_date" headertext="Last logged on"></asp:boundcolumn>
Soluzione
Perché non usi Data per le date nel database? È possibile convertire INT in DateTime usando il seguente codice di esempio:
var sdate = intdate.ToString();
var date = DateTime.ParseExact(sdate, "yyy/MM/dd", CultureInfo.InvariantCulture);
Altri suggerimenti
Grazie a Gor per avermi guidato attraverso questo. La sua risposta in sé non era l'intera soluzione, ma dopo alcuni commenti avanti e indietro, ho finito con una buona soluzione.
Invece di usare un asp:boundcolumn
Nella griglia, dovevo usare asp:templatecolumn
e mostralo attraverso un'espressione di legame (come Gor spiegato nel suo commento, anche se penso che abbia basato la sua risposta sull'uso del asp:listview
controllo, mentre uso il vecchio asp:datagrid
controllo).
Nel <columns>
Collezione del asp:datagrid
controllo:
<asp:TemplateColumn headertext="Last logged on" >
<ItemTemplate><%#DateStringFromInt(Eval("access_date"))%></ItemTemplate>
</asp:TemplateColumn>
Nel codice di codice:
protected string DateStringFromInt(object value)
{
DateTime date;
if (DateTime.TryParseExact(value.ToString(), "yyyyMMdd",
CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal,
out date))
{
return date.ToString("dd/MM/yyyy");
}
return value.ToString(); //Return original if not expected format
}