2013-04-29 160 views
1

我的应用程序中有两个DatePicker,我必须根据用户选择的日期(从日期到日期)选择记录。下图显示了我的Datepicker的设计。我想在succeddedtxtBox显示成功的过程中计数,并在failedtxtBox失败的进程数,根据日期选择在这些datepickers根据日期选择器中的From和To日期选择记录

enter image description here

XAML

 <Label>displays the succedded process</Label> 
     <Border BorderThickness="1" BorderBrush="Gray"> 
     <TextBlock FontWeight="SemiBold" FontSize="12" x:Name="success_Txtbox" Width="50" VerticalAlignment="Stretch" TextAlignment="Right"/> 
     </Border> 
     <Label>displays the failed process</Label> 
     <Border BorderBrush="Gray" BorderThickness="1"> 
     <TextBlock FontWeight="SemiBold" FontSize="12" x:Name="fail_Txtbox" Width="50" TextAlignment="Left"></TextBlock> 
      </Border> 

我想通linq查询的逻辑,看起来像这样。

var query_success = (from x in this.db.Processes 
      where x.date = "from date" && x.date = "to date" && 
      (x.Type == "completed") 
      select x).Count(); 
    success_Txtbox.Text = query_success.ToString(); 

    var query_failed = (from x in this.db.Processes 
      where x.date = "from date" && x.date = "to date" && 
      (x.Type == "Failed") 
      select x).Count(); 
    failed_Txtbox.Text = query_failed.ToString(); 

更新 - XAML

<StackPanel Orientation="Horizontal"> 
      <Label>From</Label> 
      <Border> 
       <DatePicker x:Name="fromDP"></DatePicker> 
      </Border> 
      <Label>To</Label> 
      <Border> 
       <DatePicker x:Name="toDP"></DatePicker> 
      </Border> 
      <Button Content="Go !" Height="23" Name="Go_Btn" Width="75" Click="Go_Btn_Click" /> 
     </StackPanel> 

修订回答

private void Go_Btn_Click(object sender, SelectionChangedEventArgs e) 
    { 
     var query_History = (this.db.Processes 
          .Where(x => x.Date >= fromDP.SelectedDate.Value && x.Date <= toDP.SelectedDate.Value)); 

     var query_Success = query_History.Count(p => p.Type == "Complete"); 
     var query_Failed = query_History.Count(p => p.Type == "Failed"); 

     success_Txtbox.Text = query_Success.ToString(); 
     fail_Txtbox.Text = query_Failed.ToString(); 
    } 

我尝试了上述解决方案,但它显示0作为结果的txtbox。

+0

不知道你的“在C#”的意思行更多的东西。 LINQ是C#的一部分。 – Darek 2013-04-29 13:21:39

回答

2

根据你的LINQ,如果你做

where x.date = "from date" && x.date = "to date" 

当两个datepickers选择到同你只会得到结果日期。

你想沿着

where x.date >= datepicker_FromDate.selectedValue 
    && x.date <= datepicker_ToDate.selectedValue 
+0

请在Gert Arnold的解决方案中查看我的更新,是否需要设置任何触发器或事件,以便在选择日期后显示结果? – user1221765 2013-04-29 13:40:11

+0

添加与您的示例中相同的代码应该这样做,即success_Txtbox.Text = query_success.ToString(); – Jonesopolis 2013-04-29 13:41:11

+0

我已经做过了,请在我的问题中查看我更新的答案。但是我看到的结果只有0:( – user1221765 2013-04-29 13:43:44

3

使用SelectedDate属性从日期选取器中获取所选日期。假设您有DateTime?变量fromDatetoDate中的值。然后使用一个基本查询并解决它两次获得的计数:

var processes = this.db.Processes 
       .Where(x => x.date >= fromDate.Value && x.date <= toDate.Value); 

var query_success = processes.Count(p => p.Type == "completed"); 
var query_failed = processes.Count(p => p.Type == "Failed"); 
+0

谢谢你的更新先生,我尝试了以下,但我得到'0'显示在文本框中,我必须在我的xaml中设置任何事件? – user1221765 2013-04-29 13:36:16

+0

我想你想在用户选择一个日期('SelectedDateChanged')时这样做。 – 2013-04-29 13:38:28

+0

是的,先生,确切地说。你有没有在你的解决方案中看到我的更新 – user1221765 2013-04-29 13:39:16

相关问题