wpf datagrid显示日期问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了wpf datagrid显示日期问题相关的知识,希望对你有一定的参考价值。

sql 2008里日期设置为date 只显示年月日
但是wpf datagrid显示的时候在后面自动添加了时间
怎么样可以只显示年月日呢

    使用datagrid的模板列

    模板里使用stringformat格式化显示格式

参考代码:

<DataGridTemplateColumn Header="Time">

<DataGridTemplateColumn.CellTemplate>

<DataTemplate>

<TextBlock Text="Binding Path=xxx, StringFormat=\\0:d\\"/>

</DataTemplate>

</DataGridTemplateColumn.CellTemplate>

</DataGridTemplateColumn>

追问

binding path是指什么呢

追答

就是指你绑定的那个字段啊。要记得设置datagrid的AutoGenerateColumns="False"。否则所有列都是datagrid自动生成的。

追问

那其他列还是不变正常显示吧?

参考技术A 1.Time:你的数据库/实体类 字段名

Binding="Binding Time,StringFormat='0:yyyy-MM-dd HH:mm:ss'"
完整示例:
<DataGridTextColumn Width="150" Binding="Binding UpdateTime,StringFormat='0:yyyy-MM-dd HH:mm:ss'">
<DataGridTextColumn.HeaderTemplate>
<DataTemplate>
<Label Content="出入库操作时间" HorizontalContentAlignment="Center"/>
</DataTemplate>
</DataGridTextColumn.HeaderTemplate>
</DataGridTextColumn>

WPF DataGrid:指定默认排序

【中文标题】WPF DataGrid:指定默认排序【英文标题】:WPF DataGrid: Specify a default sort 【发布时间】:2015-06-22 14:24:10 【问题描述】:

我有一个 UserControl,它基本上只包含一个 DataGrid。 在这个 DataGrid 中,我有一个事件列表(严重性 - 日期 - 消息)。 用户控件通过MVVMLight ToolkitViewModelLocator绑定。

我添加了两件事:

在我的 UserControl 资源中:

<UserControl.Resources>
    <CollectionViewSource x:Key="SortedEvents" Source="Binding Events">
        <CollectionViewSource.SortDescriptions>
            <componentModel:SortDescription PropertyName="EventTime" Direction="Descending"/>
        </CollectionViewSource.SortDescriptions>
    </CollectionViewSource>
</UserControl.Resources>

DataGrid 使用的:

<DataGrid ItemsSource="Binding Source=StaticResource SortedEvents" AutoGenerateColumns="False" >

我还在DataGridTextColumn.SortDirection 上设置了SortedDirection

<DataGridTextColumn Binding="Binding EventTime"  Header="Time" IsReadOnly="True" SortDirection="Descending"/>

当我检查设计器时,我看到显示 DataGrid 已正确排序的小箭头。

但是当我启动应用程序时,列表没有排序,箭头不在这里。如果我单击该列对其进行排序,它将正确排序所有内容,它只是似乎不起作用的默认值。

我错过了什么? (这个 dataGrid/column 甚至没有命名,所以我无法尝试通过其他方式编辑它们)。

(最初我在DataGridTextColumn 上只有SortDirection。结果相同)

【问题讨论】:

【参考方案1】:

关于这里的“小箭头”检查: ColumnHeader arrows not reflected when sorting a DataGrid in XAML

对于更复杂的答案:Pre-sorting a DataGrid in WPF

我认为主要部分是:

注意:“scm”命名空间前缀映射到 System.ComponentModel,其中 SortDescription 类存在。

xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase"

编辑

DataGrid 在其 ItemsSource 更改时删除 SortDescriptions 和 GroupDescriptions。这是必要的,因为与其他 ItemsControls 不同,DataGrid 本身会在用户单击列标题时添加 SortDescriptions,如果它们与新的 ItemsSource 不兼容,则保持原样可能会崩溃。

protected override void OnItemsSourceChanged(IEnumerable oldValue, IEnumerable newValue)
    
        if (SetupSortDescriptions != null && (newValue != null)) 
            SetupSortDescriptions(this, new ValueEventArgs<CollectionView>((CollectionView)newValue)); 

        base.OnItemsSourceChanged(oldValue, newValue);
    

【讨论】:

请再读一遍我的问题,你基本上给了我两件我已经做过和描述过的事情。【参考方案2】:

您似乎只需将 IsLiveSortingRequested="True" 添加到您的 CollectionViewSource。

 <UserControl.Resources>
    <CollectionViewSource x:Key="SortedEvents" Source="Binding Events" IsLiveSortingRequested="True">
        <CollectionViewSource.SortDescriptions>
            <componentModel:SortDescription PropertyName="EventTime" Direction="Descending"/>
        </CollectionViewSource.SortDescriptions>
    </CollectionViewSource>
</UserControl.Resources>

这对我有用

【讨论】:

以上是关于wpf datagrid显示日期问题的主要内容,如果未能解决你的问题,请参考以下文章

获取wpf datagrid单元格编辑事件

以编程方式 WPF DataGrid 行双击事件

WPF中DataGrid控件怎么修改显示时间日期的格式

WPF datagrid:禁用某些行中的编辑

如何让 WPF DataGrid 单元格右对齐而不使新行上的可选区域变小?

WPF DatePicker 显示时间和日期