Añadir nuevo registro mediante R.I.A. Services

En artículos anteriores he tratado Silverlight R.I.A. Services de forma global, en el artículo que hoy me ocupa voy a centrarme en añadir un nuevo registro a través de la citada plataforma.

En primer lugar deberemos añadir a nuestro proyecto, los elementos necesarios para usar los servicios R.I.A y la base de datos donde vamos añadir un nuevo registro. Estos pasos los podemos encontrar en el primer artículo que escribí sobre esta plataforma.

Para introducir un nuevo registro, vamos a crear una nueva ventana emergente, que aparecerá en la interfaz de usuario cuando el usuario haga clic sobre un botón que denominaremos Insertar.Para ello nos situamos en el lado del cliente de nuestro proyecto. Presionamos con el botón derecho sobre este y elegimos insertar un nuevo elemento. En la sección Silverlight elegimos el elemento Silverlight Child Window como podemos observar en la siguiente imagen:

image

Seguidamente accedemos al nuevo elemento que hemos añadido Insertar.Xaml, dentro del mismo en el área de diseño introduciremos un objeto DataForm. Dicho objeto lo podremos añadir a través de la barra de herramientas de visual Studio 2010 y nos servirá para que el usuario pueda introducir los diferentes campos del nuevo registro.

Una vez añadido el objeto, deberemos introducir los campos de los que va constar el nuevo registro. Para ello introducimos el siguiente fragmento de código:

DataForm
  1. <toolkit:DataForm Height="426" HorizontalAlignment="Left" Name="AñadirElemento" VerticalAlignment="Top" Width="378" AutoEdit="True" CommandButtonsVisibility="None">
  2.             <toolkit:DataForm.EditTemplate>
  3.                 <DataTemplate>
  4.                     <StackPanel>
  5.                         <toolkit:DataField>
  6.                             <TextBox Text="{Binding Nombre, Mode=TwoWay}" />
  7.                         </toolkit:DataField>
  8.                         <toolkit:DataField>
  9.                             <TextBox Text="{Binding Clase, Mode=TwoWay}" />
  10.                         </toolkit:DataField>
  11.                         <toolkit:DataField>
  12.                             <TextBox Text="{Binding Color, Mode=TwoWay}" />
  13.                         </toolkit:DataField>
  14.                         <toolkit:DataField>
  15.                             <TextBox Text="{Binding Stock, Mode=TwoWay}" />
  16.                         </toolkit:DataField>
  17.                         <toolkit:DataField>
  18.                             <TextBox Text="{Binding StockSeguridad, Mode=TwoWay}" />
  19.                         </toolkit:DataField>
  20.                         <toolkit:DataField>
  21.                             <TextBox Text="{Binding CosteEstandar, Mode=TwoWay}" />
  22.                         </toolkit:DataField>
  23.                         <toolkit:DataField>
  24.                             <TextBox Text="{Binding PrecioVenta, Mode=TwoWay}" />
  25.                         </toolkit:DataField>
  26.                         <toolkit:DataField>
  27.                             <controls:DatePicker Text="{Binding FechaAlta, Mode=OneWay}">
  28.                             </controls:DatePicker>
  29.                         </toolkit:DataField>
  30.  
  31.                     </StackPanel>
  32.                 </DataTemplate>
  33.             </toolkit:DataForm.EditTemplate>
  34.  
  35.         </toolkit:DataForm>

Ahora nos situamos en el código behind de la ventana que hemos añadido con anterioridad (Insertar.xaml.cs) e introduciremos la referencia a el proyecto en la parte del servidor añadiendo la siguiente directiva:

  1. using InsertarRegistro.Web;

La siguiente acción que llevaremos a cabo es introducir el siguiente fragmento de código en Insertar.xaml.cs:

  1. namespace InsertarRegistro
  2. {
  3.     public partial class Insertar : ChildWindow
  4.     {
  5.         public Productos NuevoProducto { get; set; }
  6.         public Insertar()
  7.         {
  8.             InitializeComponent();
  9.             NuevoProducto = new Productos();//objeto con la misma estructura que Productos
  10.             NuevoProducto.FechaAlta = DateTime.Now.Date;//Iniciar la fecha a hoy.
  11.             AñadirElemento.CurrentItem = NuevoProducto; //el item actual del formulario de
  12.             //datos toma la estructura de datos del objeto NuevoProducto
  13.             this.Closing += new EventHandler<System.ComponentModel.CancelEventArgs>(AddNew_Closing);
  14.             //llamada al método en el que si no se han introducido todos los datos
  15.             //estos no se envien a la base de datos.
  16.             
  17.         }
  18.         void AddNew_Closing(object sender, System.ComponentModel.CancelEventArgs e)
  19.         {
  20.             if (DialogResult == true)
  21.                 e.Cancel = !AñadirElemento.CommitEdit();
  22.             //Si no se introducen todos los elementos
  23.             //correctamente y se cierra la ventana de
  24.             //nuevo elemento, estos no se añadirán
  25.         }
  26.  
  27.         private void OKButton_Click(object sender, RoutedEventArgs e)
  28.         {
  29.             this.DialogResult = true;
  30.             AñadirElemento.CommitEdit();//actualización de elementos
  31.         }
  32.  
  33.         private void CancelButton_Click(object sender, RoutedEventArgs e)
  34.         {
  35.             this.DialogResult = false;
  36.         }
  37.     }
  38. }

Seguidamente vamos a introducir un nuevo botón en la interfaz de usuario, que nos servirá para mostrar la ventana secundaria de Silverlight creada con anterioridad. Haremos doble clic sobre el botón y de este modo se creará el código Behind para el evento clic del botón. Dentro de dicho evento introducimos el siguiente código:

  1.  
  2. private void button1_Click(object sender, RoutedEventArgs e)
  3. {
  4.     Insertar Insertarregistro = new Insertar();
  5.     Insertarregistro.Closed += new EventHandler(cerrar_nuevoelemento);
  6.     Insertarregistro.Show();//muestra el formulario para añadir
  7.     //nuevo elemento
  8.  
  9. }
  10. void cerrar_nuevoelemento(object sender, EventArgs e)
  11. {
  12.     var win = sender as Insertar;
  13.     var contexto = productosDomainDataSource.DomainContext as StockBikesDomainContext;
  14.     if (win != null && contexto != null && win.DialogResult == true)
  15.     {
  16.         contexto.Productos.Add(win.NuevoProducto);
  17.         //añade un nuevo elemento a la BD
  18.         //en espera que nosotros actualicemos los cambios
  19.         //en el servidor
  20.     }
  21.  
  22. }

De este modo el usuario puede dar de alta un nuevo registro en la base de datos de una forma intuitiva y funcional.

image