2009-12-02 90 views
0

我有一個使用RIA服務在數據網格中顯示員工數據(Northwind數據庫)的小型SL應用程序。我有一個文本過濾器,對varchar列工作正常,但不過濾可空int列。這裏是XAML:使用RIA服務在Silverlight中篩選

<UserControl xmlns:riaControls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Ria" 
     xmlns:riaData="clr-namespace:System.Windows.Data;assembly=System.Windows.Controls.Ria" 
     xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data" x:Class="FilteringSample.MainPage" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:web="clr-namespace:FilteringSample.Web" 
xmlns:converter="clr-namespace:FilteringSample" 
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="480"> 
<UserControl.Resources> 
    <converter:StringToIntConverter x:Key="MyConverter"></converter:StringToIntConverter> 
</UserControl.Resources> 
    <Grid x:Name="LayoutRoot"> 
<StackPanel Orientation="Vertical" Height="Auto" Grid.Column="0"> 
     <StackPanel Orientation="Horizontal"> 
      <Button x:Name="saveButton" Width="75" Height="30" Content="Save" Margin="5" Click="saveButton_Click"/> 
      <Button x:Name="rejectButton" Width="75" Height="30" Content="Reject" Margin="5" Click="rejectButton_Click"/> 
      <TextBlock x:Name="changeText" VerticalAlignment="Center" Width="Auto"/> 
      <TextBox x:Name="Filter" Width="100" Text="" /> 
      <riaControls:DomainDataSource x:Name="DataSource1" QueryName="GetEmployeesQuery" LoadingData="DataSource1_LoadingData" > 
       <riaControls:DomainDataSource.DomainContext> 
        <!--<web:CustomerContext></web:CustomerContext>--> 
        <web:EmployeeContext></web:EmployeeContext> 
       </riaControls:DomainDataSource.DomainContext> 

       <riaControls:DomainDataSource.FilterDescriptors> 
        <riaData:FilterDescriptorCollection LogicalOperator="Or">             
         <riaData:FilterDescriptor PropertyPath="FirstName" Operator="Contains"> 
          <riaControls:ControlParameter ControlName="Filter" PropertyName="Text" RefreshEventName="TextChanged" /> 
         </riaData:FilterDescriptor> 
         <riaData:FilterDescriptor PropertyPath="Title" Operator="Contains"> 
          <riaControls:ControlParameter ControlName="Filter" PropertyName="Text" RefreshEventName="TextChanged" /> 
         </riaData:FilterDescriptor> 
         <riaData:FilterDescriptor PropertyPath="TestFilter" Operator="Contains"> 
          <riaControls:ControlParameter ControlName="Filter" PropertyName="Text" RefreshEventName="TextChanged"/> 
         </riaData:FilterDescriptor> 

        </riaData:FilterDescriptorCollection> 
       </riaControls:DomainDataSource.FilterDescriptors> 
      </riaControls:DomainDataSource> 

     </StackPanel> 
     <data:DataGrid Name="MyGrid" ItemsSource="{Binding Data, ElementName=DataSource1}"> 
     </data:DataGrid> 
     <!--<data:DataPager PageSize="20" Source="{Binding Data, ElementName=DataSource1}" Margin="0,-1,0,0" />--> 
    </StackPanel> 

任何幫助將不勝感激。 謝謝

+0

你可以修復上面的xaml嗎?哪些篩選器是可空的int? TestFilter屬性?可能只是不能在Or語句中混合和匹配類型。 – Bryant 2009-12-02 23:59:00

回答

1

我認爲你需要一個ValueConverter在將TestFilter的文本傳遞給LINQ之前將其轉換爲int。

1

您應該可以在過濾器中混合匹配類型,而不會出現任何問題。您也不需要將值從字符串轉換爲int的值轉換器,FilterDescriptor將自動分析值。

您顯示的XAML不顯示任何int字段。你想用什麼操作符來過濾?它必須是一個數字運算符,如IsEqualTo,IsGreaterThan等。

結果是什麼?它是否加載沒有數據,加載失敗或忽略過濾器?

您可能想要嘗試處理LoadingData事件並查看事件參數上公開的EntityQuery以查看查詢的內容。