2009-12-02 3 views
0

RIA 서비스를 사용하여 직원 데이터 (Northwind 데이터베이스)를 데이터 그리드에 표시하는 작은 SL 응용 프로그램이 있습니다. varchar 열에 대해서는 정상적으로 작동하지만 nullable int 열에 대해서는 필터링하지 않는 텍스트 필터가 있습니다. 여기 XAML은 다음과 같습니다Silverlight에서 RIA 서비스로 필터링

<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을 수정할 수 있습니까? 어떤 필터가 nullable int입니까? TestFilter 속성? 아마도 Or 문에서 형식을 혼합하고 일치시킬 수는 없습니다. – Bryant

답변

1

나는 당신이 TestFilter의 텍스트를 LINQ로 전달되기 전에 int로 변환하는 ValueConverter가 필요하다고 생각합니다.

1

아무런 문제없이 필터에서 유형을 혼합하고 일치시킬 수 있어야합니다. 또한 문자열을 int로 변환하기 위해 값 변환기가 필요하지 않으면 FilterDescriptor가 값을 자동으로 구문 분석합니다.

표시 할 XAML에 int 필드가 표시되지 않습니다. 필터에 어떤 연산자를 사용하려고합니까? IsEqualTo, IsGreaterThan 등과 같은 숫자 연산자 여야합니다.

결과는 무엇입니까? 데이터가로드되지 않거나로드하지 못하거나 필터를 무시합니까?

LoadingData 이벤트를 처리하고 이벤트 args에 노출 된 EntityQuery를보고 쿼리에 대해 작성된 내용을 확인해보십시오.

관련 문제