tutorial que ejemplos c# wpf datagrid date-formatting

c# - que - Formato de fecha en el datagrid de WPF



wpf c# tutorial (6)

Ya busqué en Stackoverflow una solución y encontré esto:

Necesidad de formatear fechas en WPF DataGrid construido dinámicamente

Mi problema es que cargue algunos datos de mi base de datos del servidor SQL y quiero mostrarlos en mi aplicación WPF en un DataGrid. Esto funciona muy bien. Lo único que quiero cambiar es que la columna de fecha está en el formato "DD / MM / AAAA HH: MM: SS" y quiero tener "DD.MM.YYYY". Ok, luego miré el enlace de abajo y probé esto en mi programa:

<Grid Width="648" Height="263"> <Grid.ColumnDefinitions> <ColumnDefinition Width="172*" /> <ColumnDefinition Width="90*" /> <ColumnDefinition Width="386*" /> </Grid.ColumnDefinitions> <DataGrid Name="dgBuchung" Height="213" HorizontalAlignment="Left" Margin="30,16,0,0" VerticalAlignment="Top" Width="595" AutoGenerateColumns="True" ItemsSource="{Binding}" Grid.ColumnSpan="3" Foreground="Black" BorderBrush="#FF688CAF" Opacity="1" Background="White" BorderThickness="1" > <!-- <ab:DataGridTextColumn Header="Fecha Entrada" Width="110" Binding="{Binding date, StringFormat={}{0:dd/MM/yyyy}}" IsReadOnly="True" /> --> </DataGrid> </Grid>

La parte comentada es mi forma de solución pero arroja una excepción XMLParseException. En primer lugar, ¿es posible este modo de solución al utilizar AutoGenerateColumns? Si no, ¿de qué otra manera puedo tratar de manejar esto? En caso afirmativo, ¿cuál es el problema con el código anterior?

EDITAR: Mi pregunta no se resuelve porque decidí no reconstruir mi aplicación, ¿no hay una solución con AutoGenerateColumns = true?


Muy tarde para la fiesta aquí, pero en caso de que alguien más tropiece en esta página ...

Puede hacerlo configurando el controlador AutoGeneratingColumn en XAML:

<DataGrid AutoGeneratingColumn="OnAutoGeneratingColumn" ..etc.. />

Y luego, detrás del código, haz algo como esto:

private void OnAutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e) { if (e.PropertyType == typeof(System.DateTime)) (e.Column as DataGridTextColumn).Binding.StringFormat = "dd/MM/yyyy"; }


No te olvides de usar DataGrid.Columns, todas las columnas deben estar dentro de esa colección. En mi proyecto formateo fecha un poco diferente:

<tk:DataGrid> <tk:DataGrid.Columns> <tk:DataGridTextColumn Binding="{Binding StartDate, StringFormat=/{0:dd.MM.yy HH:mm:ss/}}" /> </tk:DataGrid.Columns> </tk:DataGrid>

Con AutoGenerateColumns no podrás controlar el formateo ya que DataGird agregará sus propias columnas.


Primero seleccione datagrid y luego vaya a las propiedades, encuentre Datagrid_AutoGeneratingColumn y haga doble clic en Y luego use este código

Datagrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e) { if (e.PropertyName == "Your column name") (e.Column as DataGridTextColumn).Binding.StringFormat = "dd/MMMMMMMMM/yyyy"; if (e.PropertyName == "Your column name") (e.Column as DataGridTextColumn).Binding.StringFormat = "dd/MMMMMMMMM/yyyy"; }

Lo intento funciona en WPF.


Sé que la respuesta aceptada es bastante antigua, pero hay una forma de controlar el formateo con AutoGeneratColumns:

Primero crea una función que se activará cuando se genere una columna:

<DataGrid x:Name="dataGrid" AutoGeneratedColumns="dataGrid_AutoGeneratedColumns" Margin="116,62,10,10"/>

Luego verifique si el tipo de la columna generada es un DateTime y simplemente cambie su formato de Cadena a "d" para eliminar la parte de tiempo:

private void DataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e) { if(YourColumn == typeof(DateTime)) { e.Column.ClipboardContentBinding.StringFormat = "d"; } }


Si su propiedad vinculada es DateTime, entonces todo lo que necesita es

Binding={Property, StringFormat=d}


Binding="{Binding YourColumn ,StringFormat=''yyyy-MM-dd''}"