31

実行時に、不明な結果セットをWPFDataGridにバインドしています。一部の列にはDateTime値が含まれるため、これらの日時フィールドを適切にフォーマットする必要があります。設計時にどの列がDateTimeフィールドになるかわからない場合、実行時にどのように列をフォーマットできますか?

DataTableのDefaultViewを使用して、WPFDataGridにバインドしています。

4

8 に答える 8

49

バインディングを次のようにフォーマットしStringFormatます。

<DataGridTextColumn Header="Fecha Entrada" 
                    Width="110"  
                    Binding="{Binding EnterDate, StringFormat={}\{0:dd/MM/yyyy hh:mm\}}"
                    IsReadOnly="True" />

コードの後ろにコードを書くよりはましだと思います

于 2009-08-21T21:04:31.917 に答える
33

コードでこれを行う方法を理解しました...XAMLでこれを模倣する方法があることを願っています。(動作するXAMLサンプルが見つかった場合は投稿してください。)

コードでこれを実現するには、次のようなグリッドのAutoGeneratingColumnイベントのイベントハンドラーを追加します。

private void ResultsDataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
    if (e.PropertyType == typeof(DateTime))
    {
        DataGridTextColumn dataGridTextColumn = e.Column as DataGridTextColumn;
        if (dataGridTextColumn != null)
        {
            dataGridTextColumn.Binding.StringFormat = "{0:d}";
        }
    }
}
于 2009-05-11T20:51:32.693 に答える
23

WPFフォームのコンストラクターでロケールカルチャ情報を次のように設定できます

this.Language = XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag);

または、ウィンドウ ヘッダー マークアップに xml マークアップxml:lang="en-GB"を含めることができます。

于 2009-12-03T08:21:32.670 に答える
8
<DataGridTextColumn Header="Last update"
    Width="110"
    IsReadOnly="True"
    Binding="{Binding Path=Contact.TimeUpdate, StringFormat={}\{0:dd/MM/yyyy hh:mm\}, Mode=OneWay}" />
于 2011-09-01T08:14:20.173 に答える
7

私は、Date または DateTime の DataType を持つ DataTemplate を使用します (どちらを通過するかによって異なります)。バインディングに StringFormat を指定して、DataTemplate に TextBlock を配置します。

このようなものは動作するはずです(テストされていません)

<DataTemplate DataType="{x:Type DateTime}">
    <TextBlock Text="{Binding StringFormat={0:d}}"  />
</DataTemplate>

または、グリッドだけに適用したい場合

<wpfToolkit:DataGrid>
    <wpfToolkit:DataGrid.Resources>
        <DataTemplate DataType="{x:Type DateTime}">
            <TextBlock Text="{Binding StringFormat={0:d}}"  />
        </DataTemplate>
    </wpfToolkit:DataGrid.Resources>
    ...
</wpfToolkit:DataGrid>
于 2009-05-11T16:59:57.283 に答える
0

FarrEver の 5 月 11 日の回答は良いですが、私には機能しません。ドイツ語の dd/mm/yyyy ではなく、アメリカの mm/dd/yyy を取得します。そこで、コンピューターの地域設定を見つけて StringFormat で使用することを提案します

    Private Sub DGrid_AutoGeneratingColumn(ByVal sender As System.Object, ByVal e As Microsoft.Windows.Controls.DataGridAutoGeneratingColumnEventArgs)
    If e.PropertyType Is GetType(DateTime) Then
        Dim dataGridTextColumn As DataGridTextColumn = TryCast(e.Column, DataGridTextColumn)
        If dataGridTextColumn IsNot Nothing Then
            Dim ShortDatePattern As String = System.Globalization.DateTimeFormatInfo.CurrentInfo.ShortDatePattern
            dataGridTextColumn.Binding.StringFormat = "{0:" + ShortDatePattern + "}" '"{0:dd/MM/yyyy}"
        End If
    End If
End Sub

参照:私のブログ

于 2009-09-02T12:59:48.137 に答える