2011-11-02 169 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