【问题标题】:Filtering in Silverlight with RIA Services使用 RIA 服务在 Silverlight 中进行过滤
【发布时间】:2009-12-02 21:42:18
【问题描述】:

我有一个小型 SL 应用程序,它使用 RIA 服务在数据网格中显示员工数据(Northwind 数据库)。我有一个文本过滤器,它可以很好地处理 varchar 列,但不能过滤可以为空的 int 列。这是 xaml:

<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>

任何帮助将不胜感激。 谢谢

【问题讨论】:

  • 你能修复上面的 xaml 吗?哪个过滤器是可为空的 int? TestFilter 属性?可能只是不能在 Or 语句中混合和匹配类型。

标签: silverlight silverlight-3.0 service ria


【解决方案1】:

我认为您需要一个 ValueConverter,在将 TestFilter 的文本传递给 LINQ 之前将其转换为 int。

【讨论】:

    【解决方案2】:

    您应该能够在过滤器中混合和匹配类型而不会出现任何问题。您也不需要值转换器将字符串转换为 int,FilterDescriptor 会自动解析值。

    您显示的 XAML 没有显示任何 int 字段。您要为过滤器使用什么运算符?它必须是数字运算符,例如 IsEqualTo、IsGreaterThan 等。

    结果如何?它是在没有数据的情况下加载、加载失败还是忽略过滤器?

    您可能想尝试处理 LoadingData 事件并查看在事件 args 上公开的 EntityQuery 以查看为查询组成的内容。

    【讨论】:

      猜你喜欢
      • 2011-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多