在Silverlight中使用RIA服务进行过滤
我有一个小型SL应用程序,它使用RIA服务在数据网格中显示员工数据(Northwind数据库)。我有一个文本过滤器,可以很好地处理varchar列,但不能处理可为null的int列。以下是xaml:在Silverlight中使用RIA服务进行过滤,silverlight,silverlight-3.0,service,ria,Silverlight,Silverlight 3.0,Service,Ria,我有一个小型SL应用程序,它使用RIA服务在数据网格中显示员工数据(Northwind数据库)。我有一个文本过滤器,可以很好地处理varchar列,但不能处理可为null的int列。以下是xaml: <UserControl xmlns:riaControls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Ria" xmlns:riaData="clr-namespace:
<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>
任何帮助都将不胜感激。
谢谢我认为您需要一个ValueConverter,在将TestFilter的文本传递给LINQ之前将其转换为int。您应该能够在过滤器中混合和匹配类型,而不会出现任何问题。您也不需要值转换器将字符串转换为int,FilterDescriptor将自动解析值 但是,您正在显示的XAML不显示任何int字段。您要为过滤器使用哪种运算符?它必须是一个数字运算符,如IsEqualTo、IsGreaterThan等 结果如何?是否加载时没有数据、加载失败或忽略筛选器
您可能希望尝试处理LoadingData事件并查看事件参数上公开的EntityQuery,以查看查询的组成。您能修复上面的xaml吗?哪个过滤器是可为空的int?TestFilter属性?可能就是无法在Or语句中混合和匹配类型。