WCF Ria Services V1.0 para Silverlight 4.- Filtrado datos desde el DomainDataSource (Parte 5)

Si bien en el post anterior hemos visto como hacer filtrado de datos desde el DomainService, ahora veremos como hacer esto mismo, pero ahora desde el DomainDataSource. El cual se encuentra del lado de la applicación silverlight, además de que nos permitirá hacer modificaciones a los filtros en tiempo de ejecución.

Por primera vez en esta serie de post, haremos mas que arrastar y/o seguir asistentes. En esta ocasión la codificación estará en nuestro archivo xaml. Y para poder trabajar en este tema, será necesario tener nuestro código como lo tendriamos en la parte 3 de esta serie.

WCF Ria Services V1.0 para Silverlight 4.- Índice:
Introducción (Parte 1)
Obtener datos desde la BD (Parte 2)
Mostrar datos (Parte 3)
Filtrar datos [DomainService] (Parte 4)
Filtrar datos [DomainDataSource] (Parte 5)

Texto a filtrar (preparando el filtro)

Para saber que texto es el que aplicaremos agregaremos un campo de text (TextBox) a nuestra interface al cual necesita llevar nombre (x:name)

WCFRiaServices501

El código quedaría como:

<TextBox x:Name="txtFilter"
         Width="350" />
<sdk:DataGrid AutoGenerateColumns="False"
              Height="200"
              ItemsSource="{Binding ElementName=productDomainDataSource, Path=Data}"
              Name="productDataGrid"
              RowDetailsVisibilityMode="VisibleWhenSelected"
              Width="400">
    <sdk:DataGrid.Columns>
        <sdk:DataGridTextColumn x:Name="nameColumn"
            ...

Modificando el Servicio de Dominio (DomainService)

Para poder realizar los filtros será necesario agregar un Descriptor de Filtros (FilterDescriptor) a nuestro Servicio de Dominio (DomainService). Será en el FilterDescriptor donde configuraremos el tipo de operaror que el filtro utilizará (Operator="StartsWith"), así como la columna en la que se aplicará el filtro con la propiedad de PropertyPath (PropertyPath="Name"), y el valor que será utilizado como filtro, el cual en esta ocasión será un mapeo al texto del campo de texto que agregamos anteriormente (Value="{Binding ElementName=txtFilter, Path=Text}").

<riaControls:DomainDataSource AutoLoad="True"
                              d:DesignData="{d:DesignInstance my1:Product, CreateList=true}"
                              Height="0"
                              LoadedData="productDomainDataSource_LoadedData"
                              Name="productDomainDataSource"
                              QueryName="GetProductsQuery"
                              Width="0">
    <riaControls:DomainDataSource.DomainContext>
        <my:RiaDomainContext />
    </riaControls:DomainDataSource.DomainContext>
    <riaControls:DomainDataSource.FilterDescriptors>
        <riaControls:FilterDescriptor Operator="StartsWith"
                                      PropertyPath="Name"
                                      Value="{Binding ElementName=txtFilter, Path=Text}" />
    </riaControls:DomainDataSource.FilterDescriptors>
</riaControls:DomainDataSource>

Ejecutando la aplicación

Al ejecutar este applicación podremos observar que el filtro es aplicado segun vamos escribiendo en el cuadro de texto, a diferencia de cuando creamos el filtro en el DomainService, que el filtro es aplicado al presionar el boton de "Load".

Nota: es posible tener un retraso en la carga de datos, por lo que es probable que mientras los datos son cargado, el filtro no se aplique como lo esperamos, pero una vez cargados los datos, el filtro trabajará adecuadamente. En nuestro siguiente post veremos como agregar un control (Busy) que nos permita saber si hay actividad en la carga de datos.

Saludos…