我想按日期过滤数据网格中的数据。将输入开始日期和结束日期,并返回这些日期之间的数据。
我在数据库中保存日期的数据类型是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;
}
}
我想按日期过滤数据网格中的数据。将输入开始日期和结束日期,并返回这些日期之间的数据。这段代码不起作用我不明白。我又写了一些与此类似的代码,但我不认为问题出在查询中,也许可能出在我数据库中的数据类型中,我无法理解它。你们能帮我吗?
您的代码和解释不足以给出准确的答案。 例如,没有指示在启动应用程序时将什么类型的元素传递(绑定)到
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)
};
}