2011-11-02 167 views
45

我已经搜索计算器的解决方案,并发现这一点:日期格式

Need to format dates in dynamically built WPF DataGrid

我的问题是,我装载一些数据我的SQL-Server的数据库,并希望向他们展示在我的WPF应用程序中的DataGrid中。这工作得很好。 我想改变的唯一事情是日期列格式为“DD/MM/YYYY HH:MM:SS”,我想要“DD.MM.YYYY”。 好了,然后我看了看下面的链接,并试图在此我PROGRAMM:

<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> 

的出评论的部分是我的解决方式,但它抛出一个XMLParseException。 首先,使用AutoGenerateColumns时可以实现这种解决方案吗? 如果不是,我该如何处理呢? 如果是,上面的代码有什么问题?

编辑: 我的问题解决了isn't因为我决定不再重建我的应用程序,isn't那里的AutoGenerateColumns =真正的解决方案?

回答

85

不要忘记使用DataGrid.Columns,所有列必须在该集合内。 在我的项目我的格式日期稍有不同:

<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将增加其自身的列。

+0

好了,向你表示感谢! 如果没有我的项目中的属性,是否可以将列绑定到数据库外的字段? – Harald

+1

@Harald,不,你不能直接绑定到数据库字段,首先你必须制作或生成一些对象(例如,使用[Entity Framework](http://msdn.microsoft.com/zh-cn/library/bb386876)的.aspx))。如果您已经拥有这些对象的集合,那么您可以将它绑定到DataGrid.ItemsSource属性,就像您在代码中一样。 – icebat

+0

它帮助了我。谢谢 –

13

如果你的绑定属性是日期时间,那么所有你需要的是

Binding={Property, StringFormat=d} 
62

很晚这里的党,但在整个这个页面万一别人绊倒......

你可以做到这一点设置AutoGeneratingColumn处理程序XAML:

<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"; 
} 
+0

这很酷,我喜欢我从文本文件加载数据并设置类型。 – MikeAinOz

+0

太棒了!如果你需要一个VB.NET版本: 私人小组MyGrid_AutoGeneratingColumn(发送者为对象,E作为DataGridAutoGeneratingColumnEventArgs)处理MyGrid.AutoGeneratingColumn \t如果e.PropertyType =的GetType(System.DateTime的)然后 \t \t TryCast(e.Column ,DataGridTextColumn).Binding.StringFormat = “DD/MM/YYYY” \t结束如果结束 子 –

+0

使用的AutoGenerateColumns – cdie

0

我知道接受的答案是很老,但有一种方法来控制与AutoGeneratColumns格式:

首先创建一个函数,将触发时产生一列:

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

然后检查,如果所产生的列的类型是日期时间,只是改变其字符串格式为“d”,以除去在部分时间:

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

第一选择数据网格,然后转到属性中找到Datagrid_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