【问题标题】:How to Sort DataGrid By Date From DataSet Using VB.NET WPF?如何使用 VB.NET WPF 从 DataSet 中按日期对 DataGrid 进行排序?
【发布时间】:2018-07-05 14:45:29
【问题描述】:

如何使用 VB.NET WPF 从 DataSet 中按日期对 DataGrid 进行排序? Datagrid 表应按最新日期自动排列行(标题 =“犯罪日期”)。 我试过使用 SortDirection= “ascending” 和 SortDirection= “descending” 但两者都行不通。有什么想法吗?

谢谢。

这是我的 UI 数据网格。 Click Here

(XAML)代码

                            <DataGrid x:Name="listCompound" SelectionChanged="listCompound_SelectionChanged"   VerticalGridLinesBrush="Black" Grid.Row ="0" Margin="10,0,0,0" VerticalAlignment="Top" CellStyle="{StaticResource DataGridContentCenter}"  AutoGenerateColumns="False" CanUserAddRows="False"    
                             CanUserSortColumns="True"  IsReadOnly="true" ColumnHeaderStyle="{StaticResource DataGridHeaderFloatingWindow}" HorizontalAlignment="Center" Grid.RowSpan="2">
                                <DataGrid.RowHeaderTemplate>
                                    <DataTemplate>
                                        <TextBlock Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGridRow}},Path=Header}" />
                                    </DataTemplate>
                                </DataGrid.RowHeaderTemplate>
                                <DataGrid.Columns>
                                    <DataGridTextColumn Header="Compound No." Binding="{Binding Path=NO}"  Width="135">
                                        <DataGridTextColumn.ElementStyle>
                                            <Style TargetType="{x:Type TextBlock}">
                                                <Setter Property="TextBlock.TextWrapping" Value="Wrap"/>
                                                <Setter Property="TextBlock.TextAlignment" Value="Center"/>
                                                <Setter Property="TextBlock.VerticalAlignment"  Value="Center"/>
                                            </Style>
                                        </DataGridTextColumn.ElementStyle>
                                    </DataGridTextColumn>
                                    <DataGridTextColumn Header="Plate Number" Binding="{Binding Path=VEHICLE}" Width="120" >
                                        <DataGridTextColumn.ElementStyle>
                                            <Style TargetType="{x:Type TextBlock}">
                                                <Setter Property="TextBlock.TextWrapping" Value="Wrap" />
                                                <Setter Property="TextBlock.TextAlignment" Value="Center"/>
                                                <Setter Property="TextBlock.VerticalAlignment"  Value="Center"/>
                                            </Style>
                                        </DataGridTextColumn.ElementStyle>
                                    </DataGridTextColumn>
                                    <DataGridTextColumn Header="Offence Date" Binding="{Binding Path=DATE, StringFormat=dd/MM/yyyy}" Width="90" SortDirection="Descending">
                                        <DataGridTextColumn.ElementStyle>
                                            <Style TargetType="{x:Type TextBlock}">
                                                <Setter Property="TextBlock.VerticalAlignment"  Value="Center"/>
                                            </Style>
                                        </DataGridTextColumn.ElementStyle>
                                    </DataGridTextColumn>                                        
                                    <DataGridTextColumn Header="Amount" Binding="{Binding Path=PAY}" Width="80" >
                                        <DataGridTextColumn.ElementStyle>
                                            <Style TargetType="{x:Type TextBlock}">
                                                <Setter Property="TextBlock.VerticalAlignment"  Value="Center"/>
                                            </Style>
                                        </DataGridTextColumn.ElementStyle>
                                    </DataGridTextColumn>
                                    <DataGridTemplateColumn Width="100">
                                        <DataGridTemplateColumn.CellTemplate >
                                            <DataTemplate>
                                                <Button x:Name="BtnBayar" Click="BtnBayar_Click" Content="Bayar"  FontWeight="Medium"  BorderBrush="Black"  CommandParameter="{Binding Path=REFNO}" Background="{x:Null}" Width="70" Height="30" HorizontalAlignment="Center" VerticalAlignment="Center" Padding="1" Foreground="Black" Margin="1">
                                                    <Button.Style >
                                                        <Style TargetType="Button" >
                                                            <Style.Triggers>
                                                                <Trigger Property ="IsMouseOver" Value="false">
                                                                    <Setter Property= "Background" Value="Green" />
                                                                </Trigger>
                                                            </Style.Triggers>
                                                        </Style>
                                                    </Button.Style>
                                                </Button>
                                            </DataTemplate>
                                        </DataGridTemplateColumn.CellTemplate>
                                    </DataGridTemplateColumn>
                                </DataGrid.Columns>
                            </DataGrid>

VB.NET

            Dim i As Integer = 0
            While i < CompoundLists.Count
                dsRow = ds.Tables("tblCompound").NewRow
                dsRow("NO") = CompoundLists(i).REFNO
                dsRow("VEHICLE") = CompoundLists(i).VEHICLENO
                dsRow("DATE") = CDate(CompoundLists(i).TRANSDATE)
                dsRow("PAY") = CompoundLists(i).AMNTOPAY
                ds.Tables("tblCompound").Rows.Add(dsRow)
                i += 1

            End While

            TransLog("Storing compound Info in Dataset")
            'txtAccNo.Text = strBillAcc


            dtSource = ds.Tables("tblCompound")

            FillGrid()

【问题讨论】:

    标签: wpf vb.net sorting datagrid


    【解决方案1】:

    我是这样做的:

    Dim NewView As DataView = ds.DefaultView 'ds is your DataTable right?
    NewView.Sort = "DATE DESC"
    ds = NewView.ToTable
    

    通过这个你创建数据视图,将数据表复制到它,按列“DATE”降序对其进行排序,然后将数据视图复制到数据表(覆盖)

    【讨论】:

    • 我认为 ds 是数据集。该表是 ds.Tables("tblCompound")
    • 应该一样,因为数据集包含表格。
    猜你喜欢
    • 2015-11-02
    • 2011-08-12
    • 1970-01-01
    • 1970-01-01
    • 2012-02-12
    • 1970-01-01
    • 2018-03-30
    • 2010-12-10
    相关资源
    最近更新 更多