PDF de programación - DomainDataSource. Un gestor de datos en Silverlight para la interface de usuario

DomainDataSource. Un gestor de datos en Silverlight para la interface de usuariográfica de visualizaciones

Publicado el 14 de Enero del 2017
512 visualizaciones desde el 14 de Enero del 2017
1,7 MB
9 paginas
Creado hace 13a (25/03/2011)
DomainDataSource
Un gestor de datos en Silverlight para la interfaz de usuario

DomainDataSource es un componente de WCF RIA Services que funciona como intermediario
entre los datos proporcionados por el contexto de dominio y la interfaz de usuario de nuestras apli-
caciones Silverlight, facilitando su manipulación. En este artículo abordaremos las principales carac-
terísticas de este control, de modo que podamos explotar al máximo su potencial.

a

l igual que el resto de elementos de la
interfaz de usuario en una aplicación Silverlight, el con-
trol DomainDataSource se define declarativamente uti-
lizando código XAML. No obstante, también será posi-
ble implementar determinados aspectos de su com-
portamiento desde code behind, como veremos en la
aplicación de ejemplo que vamos a desarrollar.

Por otro lado, se trata de un control que no se li-
mita simplemente a presentar los datos obtenidos
desde el contexto de dominio, sino que está dotado
de una serie de características adicionales que le per-
miten ordenar, filtrar, agrupar, etc. dichos datos.

Un ejemplo demostrativo

Con la finalidad de ilustrar las anteriormente men-
cionadas características en el uso del control Do‐
mainDataSource, vamos a crear en Visual Studio
2010 un nuevo proyecto de tipo "Silverlight Busi-
ness Application" al que daremos el nombre Prue‐
basDDS1. El motivo de utilizar este tipo de proyecto
radica en que nos proporciona cierta infraestruc-
tura de la interfaz de usuario ya preparada, como
es la posibilidad de tener varias páginas en la apli-
cación, realizando la navegación entre las mismas,
lo que aprovecharemos para explicar cada uno de
los aspectos del DomainDataSource en páginas dis-
tintas del proyecto.

Para adaptar esta interfaz prefabricada a nuestras
necesidades, acomodando los estilos y recursos asig-

nados a tipos de letra, literales, controles, etc., debe-
mos editar el archivo de estilos Styles.xaml, situado
en la carpeta Assets de la estructura del proyecto; y
el archivo de recursos ApplicationStrings.resx,
situado en la carpeta Assets/Resources. Cuando ne-
cesitemos añadir nuevas páginas al proyecto lo hare-
mos dentro de la carpeta Views (figura 1).

Figura 1. Estructura de
carpetas del proyecto

Por otro lado, esta plantilla de proyecto tam-
bién proporciona ya activado el soporte de WCF
RIA Services [1], necesario para la interacción de
los datos entre las capas cliente e intermedia de la

1 Todo el código fuente desarrollado a lo largo de este artículo está disponible para su descarga en http://www.dotnetmania.com

Luis Miguel Blanco
Aprendiz de brujo y
redactor de dotNetManía
(http://geeks.ms/blogs/lmblanco)

aplicación [2]. Como requisito previo, ne-
cesitaremos tener instalado Silverlight 4
Tools for Visual Studio 2010 [3]. En
cuanto a los datos de ejemplo, utilizare-
mos la base de datos Chinook [4], que
podemos descargar desde CodePlex.

La primera tarea a realizar será la
creación, en el proyecto Web de nues-
tra solución, de un "ADO.NET Data
Model" (modelo de datos) con el nom-
bre ChinookModel, donde a partir de la
tabla Invoice de la base de datos se ge-
nerará una entidad del mismo nombre.
A continuación, crearemos un "Domain
Service Class" (servicio de dominio)
con el nombre ChinookDomainService,
que configuraremos para que genere el
código para las operaciones CRUD
sobre la entidad Invoice. Estas opera-
ciones de creación se explican con más
detalle en [2].

Obtención, presentación
y actualización de datos
La principal tarea a cargo del control Do‐
mainDataSource consiste en obtener una
colección de entidades desde el contexto
de dominio mediante la llamada a uno
de sus métodos. Una vez obtenida la co-
lección, aplicaremos en los elementos de
la interfaz de usuario expresiones de en-
lace a datos (data binding), para conse-
guir visualizar en dichos elementos los
valores de las entidades.

Comenzaremos, como indica el tí-
tulo de este apartado, por las operacio-
nes elementales de
recuperación,
visualización y edición de datos. Para
ello, añadiremos al proyecto una página
con el nombre Presentacion.xaml, a la
que accederemos desde la página prin-
cipal de la aplicación (MainPage.xaml)
utilizando un control HyperlinkButton,
como vemos en el listado 1.

Dentro del di-
señador de la página
Presentacion.xaml
arrastraremos un Do‐
mainDataSource y un
DataGrid desde
la
Caja de herramientas,
asignándoles respec-
tivamente los nom-
bres ddsInvoices y
grdInvoices. Debido
a que el DomainData‐
Source necesita acce-
der al contexto de
dominio,
tenemos
que especificar decla-
rativamente dicho do-
minio añadiendo un
espacio de nombres
(xmlns) con el nom-
bre domainctx, en la
etiqueta UserControl
de la página.

Figura 2. DataGrid visualizando los datos del
DomainDataSource

Pasando a la configuración del control
DomainDataSource, la propiedad Query‐
Name contendrá el nombre del método per-
teneciente al servicio de dominio
(GetInvoices), que devuelve la colección
de entidades al contexto de dominio, y éste
a su vez al control. Para que el DomainDa‐
taSource tenga acceso al contexto de do-

minio, añadiremos al código de este con-
trol la etiqueta DomainContext, especifi-
cando el espacio de nombres domainctx,
declarado en la etiqueta UserControl.

Finalmente, para que el DataGrid
pueda mostrar datos, asignaremos a su
propiedad ItemsSource una expresión de
enlace a datos que conecte este control

<navigation:Page x:Class="PruebasDDS.Views.Presentacion"
xmlns:domainctx="clr‐namespace:PruebasDDS.Web"
<!‐‐ .... ‐‐>
<riaControls:DomainDataSource x:Name="ddsInvoices" QueryName="GetInvoices">

<riaControls:DomainDataSource.DomainContext>

<domainctx:ChinookDomainContext />

</riaControls:DomainDataSource.DomainContext>

</riaControls:DomainDataSource>
<!‐‐ .... ‐‐>
<sdk:DataGrid x:Name="grdInvoices"

ItemsSource="{Binding ElementName=ddsInvoices, Path=Data}"
Margin="5" Height="350" />

Listado 2

<HyperlinkButton x:Name="lnkPresentacion"

Style="{StaticResource LinkStyle}"
NavigateUri="/Presentacion"
TargetName="ContentFrame"
Content="{Binding Path=ApplicationStrings.PresentacionPageTitle,
Source={StaticResource ResourceWrapper}}"/>

Listado 1

con el DomainDataSource (listado 2). El
resultado lo vemos en la figura 2.

En tiempo de ejecución, además de
consultar los datos también es posible
editarlos. Una vez finalizados los cam-
bios, podemos grabarlos en la base de
datos o descartarlos mediante los méto-
dos SubmitChanges o RejectChanges del
DomainDataSource, lo que en este ejem-

a
í
n
a
M
t
e
N
t
o
d

43

<Button x:Name="btnGrabar" Content="Grabar cambios"

Width="110" Margin="5" Click="btnGrabar_Click" />

<Button x:Name="btnDeshacer" Content="Deshacer cambios"
Width="110" Margin="5" Click="btnDeshacer_Click" />

//‐‐‐‐‐‐‐‐‐‐‐
private void btnGrabar_Click(object sender, RoutedEventArgs e)
{

this.ddsInvoices.SubmitChanges();

private void btnDeshacer_Click(object sender, RoutedEventArgs e)
{

this.ddsInvoices.RejectChanges();

}

}

Listado 3

plo llevaremos a cabo desde el evento Click de sendos
controles Button (listado 3).

Figura 3. DataGrid ordenado mediante
el DomainDataSource

Ordenación

La siguiente característica del DomainDataSource que abor-
daremos será la capacidad de ordenar sus datos, para lo
que añadiremos una nueva página al proyecto con el nom-
bre Ordenacion.xaml, en la que al igual que en el caso an-
terior (y en los próximos ejemplos) añadiremos un
DomainDataSource y un DataGrid; pero en esta ocasión re-
duciremos el número de columnas del DataGrid, creán-
dolas manualmente dentro de la etiqueta Columns, a la que
añadiremos tantos controles DataGridTextColumn como
columnas necesitemos en la cuadrícula de datos. La pro-

piedad Binding, mediante una expresión de enlace a datos,
será la encargada de obtener del DomainDataSource el valor
correspondiente para cada columna.

Para ordenar los datos en el DomainDataSource em-
plearemos la etiqueta SortDescriptors, que representa
una colección de objetos SortDescriptor; este tipo de
objeto contiene el modo de ordenación por uno de los
campos de la colección de entidades devuelta por el
DomainDataSource.

En esta parte del ejemplo ordenaremos los re-
sultados por los campos BillingCountry, Billing‐
City y Total (listado 4), estableciendo también un
sentido de la ordenación distinto para cada uno, me-

<riaControls:DomainDataSource x:Name="ddsInvoices" QueryName="GetInvoices"

AutoLoad="True">
<riaControls:DomainDataSource.DomainContext>

<domainctx:ChinookDomainContext />

</riaControls:DomainDataSource.DomainContext>

<riaControls:DomainDataSource.SortDescriptors>

<riaControls:SortDescriptor PropertyPath="BillingCountry" Direction="Descending" />
<riaControls:SortDescriptor PropertyPath="BillingCity" Direction="Ascending" />
<riaControls:SortDescriptor PropertyPath="Total" Direction="Descending" />

</riaControls:DomainDataSource.SortDescriptors>

</riaControls:DomainDataSource>
<!‐‐ .... ‐‐>
<sdk:DataGrid x:Name="grdInvoices"

ItemsSource="{Binding ElementName=ddsInvoices, Path=Data}"
AutoGenerateColumns="False" Margin="5" Height="350">

<sdk:DataGrid.Columns>

<sdk:DataGridTextColumn Header="Factura" Binding="{Binding InvoiceId}" />
<sdk:DataGridTextColumn Header="Cliente" Binding="{Binding CustomerId}" />
<sdk:DataGridTextColumn Header="País" Binding="{Binding BillingCountry}" />
<sdk:DataGridTextColumn Header="Ciudad" Binding="{Binding BillingCity}" />
<sdk:DataGridTextColumn Header="Importe" Binding="{Binding Total}" />

</sdk:DataGrid.Columns>

</sdk:DataGrid>

Listado 4

a
í
n
a
M
t
e
N
t
o
d

44

<StackPanel Width="300" >

<StackPanel Orientation="Horizontal">

<TextBlock Text="Orden 1" Margin="0,2,5,0"

VerticalAlignment="Center" />

<TextBox x:Name="txtOrden1" Margin="0,2,5,0" Width="100" />
<CheckBox x:Name="chkDescendente1" Content="Descendente"
Margin="0,2,10,0" VerticalAlignment="Center" />

</StackPanel>

<StackPanel Orientation="Horizontal">

<TextBlock
  • Links de descarga
http://lwp-l.com/pdf239

Comentarios de: DomainDataSource. Un gestor de datos en Silverlight para la interface de usuario (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad