date在WPF数据网格格式
我已经search了一个解决scheme的计算器,发现这个:
需要在dynamic构build的WPF DataGrid中格式化date
我的问题是,我从我的SQL服务器数据库加载一些数据,并希望在我的WPF应用程序在DataGrid中显示它们。 这工作得很好。 我唯一想改变的是date列的格式是“DD / MM / YYYY HH:MM:SS”,我想要“DD.MM.YYYY”。 好吧,然后我看了下面的链接,并在我的程序中尝试了这个:
<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>
out注释部分是我的解决scheme,但它抛出一个XMLParseException。 首先,使用AutoGenerateColumns时可以解决这个问题吗? 如果不是,我还能如何处理呢? 如果是的话,上面的代码有什么问题?
编辑:我的问题没有解决,因为我决定不重build我的应用程序,是不是有AutoGenerateColumns = true的解决scheme?
不要忘记使用DataGrid.Columns,所有列必须在该集合内。 在我的项目中,我的格式date有点不同:
<tk:DataGrid> <tk:DataGrid.Columns> <tk:DataGridTextColumn Binding="{Binding StartDate, StringFormat=\{0:dd.MM.yy HH:mm:ss\}}" /> </tk:DataGrid.Columns> </tk:DataGrid>
有了AutoGenerateColumns,你就不能控制格式,因为DataGird会添加自己的列。
这里的派对很晚,但如果有人在这个网页上摔倒了,
您可以通过在XAML中设置AutoGeneratingColumn处理程序来完成此操作:
<DataGrid AutoGeneratingColumn="OnAutoGeneratingColumn" ..etc.. />
然后在代码后面做这样的事情:
private void OnAutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e) { if (e.PropertyType == typeof(System.DateTime)) (e.Column as DataGridTextColumn).Binding.StringFormat = "dd/MM/yyyy"; }
如果你的绑定属性是DateTime,那么你所需要的就是
Binding={Property, StringFormat=d}
我知道接受的答案是相当古老,但有一种方法来控制与AutoGeneratColumns的格式:
首先创build一个函数,这个函数会在列生成时触发:
<DataGrid x:Name="dataGrid" AutoGeneratedColumns="dataGrid_AutoGeneratedColumns" Margin="116,62,10,10"/>
然后检查生成的列的types是否是DateTime,只是将其string格式更改为“d”以删除时间部分:
private void DataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e) { if(YourColumn == typeof(DateTime)) { e.Column.ClipboardContentBinding.StringFormat = "d"; } }
首先selectdatagrid,然后去属性findDatagrid_AutoGeneratingColumn并双击然后使用这个代码
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"; }
我尝试它在WPF上的作品