WPF DatePicker 数据网格过滤器

问题描述 投票:0回答:1

我想按日期过滤数据网格中的数据。将输入开始日期和结束日期,并返回这些日期之间的数据。

我在数据库中保存日期的数据类型是DateTime;

2024-09-09 19:32:50.160

像这样。

这是我的数据网格。我正在做一个停车场项目。左边的DatePicker是startDate,另一个是endDate

我的XAML代码;

<Grid Width="300" HorizontalAlignment="Left" Grid.Row="4" Margin="110 0 15 0" >
    <DatePicker Name="startDatePicker" SelectedDateChanged="StartDatePicker_SelectedDateChanged" Width="140" Margin="20,1,140,0" VerticalAlignment="Center" />

    <DatePicker Name="endDatePicker" SelectedDateChanged="EndDatePicker_SelectedDateChanged" Width="140" Margin="165,1,-5,0" VerticalAlignment="Center" />
</Grid>
<DataGrid ColumnHeaderStyle="{DynamicResource DataGridColumnHeaderStyle1}" Margin="15 20 15 0" RowStyle="{DynamicResource DataGridRowStyle1}"  CellStyle="{DynamicResource DataGridCellStyle1}" x:Name="carActionDataGrid" Style="{DynamicResource DataGridStyle1}" AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Header="#" IsReadOnly="True" CanUserResize="False" Width="auto" Binding="{Binding Id}"/>
        <DataGridTextColumn Header="Plaka" Binding="{Binding Plate}" IsReadOnly="True" Width="*" />
        <DataGridTextColumn Header="Giriş Zamanı" Binding="{Binding EntryTime, StringFormat=\{0:dd.MM.yyyy HH:mm\}}" IsReadOnly="True" Width="*"/>
        <DataGridTextColumn Header="Çıkış Zamanı" Binding="{Binding CheckoutTime, StringFormat=\{0:dd.MM.yyyy HH:mm\}}" IsReadOnly="True" Width="*"/>
        <DataGridTextColumn Header="Araç Durumu" Binding="{Binding Status}" IsReadOnly="True" Width="*"/>
        <DataGridTextColumn Header="Kullanıcı" Binding="{Binding Username}" IsReadOnly="True" Width="*"/>
    </DataGrid.Columns>
</DataGrid>

在我的 XAML 代码中,我在打印数据条目中格式化数据,然后打印它。

我的C#代码;

private void StartDatePicker_SelectedDateChanged(object sender, SelectionChangedEventArgs e)
{
    if (endDatePicker.SelectedDate == null || endDatePicker.SelectedDate < startDatePicker.SelectedDate)
    {
        endDatePicker.SelectedDate = DateTime.Now.Date;
    }

    ApplyDateFilter();
}

private void EndDatePicker_SelectedDateChanged(object sender, SelectionChangedEventArgs e)
{
    ApplyDateFilter();
}

private void ApplyDateFilter()
{
    if (startDatePicker.SelectedDate == null || endDatePicker.SelectedDate == null)
        return;

    var startDate = startDatePicker.SelectedDate.Value.Date; 
    var endDate = endDatePicker.SelectedDate.Value.Date.AddDays(1).AddTicks(-1); 

    using (var context = new BarcodeReaderEntities())
    {
        var filteredData = context.QRInfoes
            .Where(car =>
                car.EntryTime >= startDate &&
                (car.CheckoutTime == null || car.CheckoutTime <= endDate)  // CheckoutTime might be null
            )
            .ToList();

        carActionDataGrid.ItemsSource = filteredData;
    }
}

我想按日期过滤数据网格中的数据。将输入开始日期和结束日期,并返回这些日期之间的数据。这段代码不起作用我不明白。我又写了一些与此类似的代码,但我不认为问题出在查询中,也许可能出在我数据库中的数据类型中,我无法理解它。你们能帮我吗?

c# wpf xaml desktop-application desktop
1个回答
0
投票

您的代码和解释不足以给出准确的答案。 例如,没有指示在启动应用程序时将什么类型的元素传递(绑定)到

carActionDataGrid.ItemsSource
。 因此,答案将部分基于猜测。 我假设 ItemsSource 收到一个元素类型为
Car
的集合。

        private void ApplyDateFilter()
        {
            if (startDatePicker.SelectedDate == null || endDatePicker.SelectedDate == null)
                return;

            DateTime startDate = startDatePicker.SelectedDate.Value.Date;
            DateTime endDate = endDatePicker.SelectedDate.Value.Date.AddDays(1).AddTicks(-1);

            carActionDataGrid.Items.Filter = item =>
            {
                Car car = (Car) item;

                return car.EntryTime >= startDate && (car.CheckoutTime == null || car.CheckoutTime <= endDate) 
            };

        }
© www.soinside.com 2019 - 2024. All rights reserved.