SlideShare ist ein Scribd-Unternehmen logo
1 von 52
Downloaden Sie, um offline zu lesen
________________________________________________

  Programa Desarrollador Cinco Estrellas 2005
                  Estrella 2
  ________________________________________________



Guia de Ejericicios – Aplicaciones Web Forms
con ASP.NET




                     Página 1 de 52
Índice
Requisitos ............................................................................................................................ 3
Introducción.......................................................................................................................... 4
ASP .NET 2.0 – Paso a Paso............................................................................................... 5
Grid View.............................................................................................................................. 5
DetailsView ........................................................................................................................ 16
FormView ........................................................................................................................... 24
DataList .............................................................................................................................. 27
Enlazando Datos con Objetos............................................................................................ 30
   Enlazando con la capa de acceso a Datos..................................................................... 30
   Enlazando a una Clase de Negocios.............................................................................. 39
TREEVIEW + DataAdapter ................................................................................................ 49




                                                         Página 2 de 52
Requisitos
   •   Haber cursado y aprobado el examen correspondiente al módulo de la Estrella 1 del
       programa Desarrollador 5 Estrellas.
   •   Haber leído y comprendido el material teórico correspondiente al módulo de la
       Estrella 2 del programa.
   •   Para la resolucion de los ejercicios debe tener instalado:

          o MS Visual Studio 2005 / Visual Web Developer 2005 Express Edition.
          o MS SQL Server 2005 Express Edition.

Debe instalar además las siguientes bases de datos:

   -   Northwind (http://www.microsoft.com/downloads/details.aspx?FamilyId=06616212-
       0356-46A0-8DA2-EEBC53A68034&displaylang=en )
   -   AdventureWorks
       (http://www.microsoft.com/downloads/details.aspx?familyid=9697AAAA-AD4B-416E-
       87A4-A8B154F92787&displaylang=en )

Para instalar correctamente la base AdventureWorks se recomienda la lectura del
documento titulado “SQL Server 2005 Databases and Samples Overview”, que acompaña
a esta guia. También puede ser descargado de
http://download.microsoft.com/download/d/8/6/d865cf0c-c44b-401b-b426-
b3bf5c628112/SQLServerDatabasesAndSamplesOverview.htm




                                    Página 3 de 52
Introducción
En el presente documento se desarrollan distintos ejercicios “Paso a Paso” que sirven de
complemento al curso Estrella 2 – ASP.NET, del programa Desarrollador 5 Estrellas.

Los ejercicios aquí desarrollados muestran paso a paso como realizar aplicaciones web
simples con acceso a datos, y pueden realizarse en C# y/o VB.NET (hay porciones de
código transcriptas, e imágenes que lo guiarán para lograr los objetivos).

Se han resuelto algunos de los ejercicios para que el alumno pueda tener el ejemplo del
codigo terminado. Los ejercicios resueltos de esta guia paso a paso son:

   •   GridView
   •   DetailsView
   •   Enlazando con la capa de negocios

Todos ellos se encuentran en el proyecto “DCE2005 Acceso a Datos”, adjunto al material
del curso.

También se encuentran adjuntas al material otros dos proyectos, uno que ejemplifica la
utilización de los nuevos controles de login incorporados en ASP.NET 2.0, y otro que
muestra la utilización de páginas maestras y los nuevos controles de navegación y menú.

En el ejercicio de Acceso a Datos se incluyen también el nuevo concepto de Themes &
Skins, para dar a la aplicación un aspecto agradable (este nuevo tema esta desarrollado
en la presentación teórica).




                                     Página 4 de 52
ASP .NET 2.0 – Paso a Paso
                                          Grid View
Objetivo: Construir un formulario con un control GridView para visualizar,
modificar y eliminar datos de la tabla “Products” de la base de datos
Northwind.
NOTA: La serie de pasos utilizada en la resolución del presente ejercicio no necesariamente refleja las
mejores prácticas de Desarrollo y Arquitectura de aplicaciones empresariales establecidas por Microsoft.

   1. Abra el Visual Web Developer 2005 Express Edition. Seleccione el menú File / New
      Web Site para crear un nuevo Web Site, según la siguiente figura. Note que el
      lenguaje es el Visual Basic, pero si usted desea cambiarlo a Visual C# no hay
      ningún problema, ya que los pasos son los mismos.




   2. Luego presione el botón OK. Se abrirá una ventana conteniendo la página
      Default.aspx con el HTML que se mostrará. A los efectos del ejercicio, vamos a
      crear páginas relativas al tópico abordado, por lo tanto, abra el Solution Explorer
      (Ctrl + Alt + L) y excluya esta página. Para agregar una nueva página al Solution
      Explorer, haga click con el botón derecho sobre C:WebSiteDCE20005 y seleccione
      Add New Item. Escriba GridView.aspx en el nombre de la página y haga click en
      Add.
                                           Página 5 de 52
3. En caso de que quiera escribir los Tags HTML directamente en esta ventana,
   siéntase a gusto, sin embargo, le mostraré los controles en la ventana de Design.
   Siendo así, haga click en el botón Design en el pie de la página.




                                  Página 6 de 52
4. Abra la Toolbox y arrastre un control GridView hacia el formulario. Se abrirá una
   Smart Tag conteniendo diversas opciones.




                                  Página 7 de 52
5. Seleccione Auto Format y aplique un formato de acuerdo con su gusto.




6. Para definir la fuente de datos, en Choose Data Source seleccione New Data
   Source.




7. Usted puede seleccionar cualquier fuente de datos, pero en este caso elija
   Database. Note que ya se define un ID (SqlDataSource1), y en caso de que quiera
   alterarlo bastará con escribirlo. Como vamos a utilizar esta conexión en varios
   ejercicios, deje el checkbox de conexión seleccionado para que la string de
   conexión sea almacenada en el archivo Web.Config.



                                 Página 8 de 52
8. Se abrirá un “wizard” por el cual se configura la base de datos y se arma la cadena
   de conexión, le dejamos ese paso para que lo configure de acuerdo a sus
   necesidades.

9. Una vez configurada la cadena de conexión necesita identificar cuál es la tabla que
   será usada como fuente de datos. Seleccione Productos y algunos campos.




                                  Página 9 de 52
10. Como permitiremos la edición de datos en el GridView, haga click en el botón
    Advanced para abrir esta ventana, donde seleccionará las dos opciones para incluir
    en el control SqlDataSource todas las instrucciones SQL que hacen efectivas estas
    operaciones.




                                 Página 10 de 52
11. En la Smart Tag se muestran los checkboxes para que active las operaciones.
    Seleccione:
    • Enable Paging, para permitir la paginación.
    • Enable Sorting, para permitir el ordenado por columna.
    • Enable Editing, para permitir la edición de datos directamente en el GridView.
    • Enable Deleting, para permitir la exclusión de datos.




12. Si desea editar las columnas, seleccione Edit Columns. Primero deberá “des
    seleccionar” el tilde campo “Auto generate Columns”, y luego añadir las columnas
    que desee:




                                 Página 11 de 52
13. Puede aplicar el formato que desee en los campos, por ejemplo configure el
   formato en el campo “ProductNumber para que sea exhibido como numérico, sin
   decimales (DataFormatString = {0:n0}).
   Se puede aplicar cualquier formato a las columnas.




                               Página 12 de 52
14. Como fue permitida la edición de datos en el control, personalice los botones al
    idioma en el que el control será utilizado. Para ello, seleccione el Command Field,
    localice las propiedades Text de cada botón y modifique el texto.




                                  Página 13 de 52
15. Seleccione Auto Format en el Smart Tag, y aplique un formato de acuerdo con su
    agrado. (en el ejemplo adjunto en el material se utiliza un Theme para la definición
    del estilo)

16. Guarde el proyecto y presione CTRL + F5 para ejecutarlo en el navegador.
    Es importante destacar que el ASP.NET 2.0 no necesita tener un IIS instalado en la
    máquina, ya que trabaja con su propio servidor web de desarrollo.




                                  Página 14 de 52
El código de este ejercicio se encuentra en el ejemplo adjunto “DCE2005 Acceso a Datos”, en
la página “GridView.aspx”, tenga en cuenta que en el ejercicio resuelto se utiliza una “Máster
Page y Themes” para dar un formato y estilo amigable.




                                       Página 15 de 52
DetailsView
Objetivo: Construir un formulario con el control DetailsView para visualizar y
modificar los registros de la tabla “Employes” de la base de datos
AdventureWorks.
NOTA: La serie de pasos utilizada en la resolución del presente ejercicio no necesariamente refleja las
mejores prácticas de Desarrollo y Arquitectura de aplicaciones empresariales establecidas por Microsoft.

   1. Agregue un nuevo Web Form al Solution Explorer, llámelo DetailsView.aspx.
   2. Abra la Toolbox y arrastre un control DetailsView hacia el formulario. Se abrirá una
      ventana con la Smart Tag para informar la fuente de datos. Seleccione New data
      source:




   3. Informe cuál es la fuente de datos, en este caso es una Database.




                                          Página 16 de 52
4. Seleccione la tabla Employees con algunos campos.




                               Página 17 de 52
5. Haga click en el botón Advanced Options y seleccione los dos checkboxes para que
   sean creados los métodos para soportar la inserción y edición de datos.




                                Página 18 de 52
6. Volviendo al Smart Tag, seleccione todos los checkboxes para activar la paginación
   y el mantenimiento de datos.

7. .Ingrese a la opción “EditFields…” y des seleccione la opción “Auto generate
   columns”. Del mismo modo que hizo con la grilla, añada los campos que desee por
   medio de la opción “Add New Field…”




8. Personalice el campo “Fecha Finalización” para que quede con el formato de
   acuerdo con la propiedad DataFormatString, que es {0:dd/MM/yyyy}. El “0:” indica
   que será el campo actual y el formato viene a continuación.




                                 Página 19 de 52
9. Si analiza el código HTML generado, notará que el contenido de la fuente de datos
   está declarado dentro del HTML a través de la Tag asp:SqlDataSource.




                                 Página 20 de 52
<form id="form1" runat="server">
<asp:DetailsView ID="DetailsView1" runat="server" AllowPaging="True"
AutoGenerateRows="False" BackColor="#DEBA84" BorderColor="#DEBA84"
BorderStyle="None" BorderWidth="1px" CellPadding="3" CellSpacing="2"
DataSourceID="SqlDataSource1" Height="50px" Width="125px">
<FooterStyle BackColor="#F7DFB5" ForeColor="#8C4510" />
<EditRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="White" />
<RowStyle BackColor="#FFF7E7" ForeColor="#8C4510" />
<PagerStyle ForeColor="#8C4510" HorizontalAlign="Center" />
<Fields>
<asp:CommandField ShowDeleteButton="True" ShowEditButton="True"
ShowInsertButton="True" />
<asp:BoundField DataField="ProductId" HeaderText="Codigo"
SortExpression="ProductId" />
<asp:BoundField DataField="Name" HeaderText="Nombre" SortExpression="Name" />
<asp:BoundField DataField="ProductNumber" HeaderText="Producto"
SortExpression="ProductNumber" />
<asp:BoundField DataField="DaysToManufacture" HeaderText="Demora en Dias"
SortExpression="DaysToManufacture" />
<asp:BoundField DataField="ListPrice" HeaderText="Precio"
SortExpression="ListPrice" />
<asp:BoundField DataField="DiscontinuedDate" DataFormatString="{0:dd/MM/yyyy}"
HeaderText="Fecha Finalizacion" SortExpression="DiscontinuedDate" />
</Fields>
<HeaderStyle BackColor="#A55129" Font-Bold="True" ForeColor="White" />
</asp:DetailsView>

<asp:SqlDataSource ID="sqlDataSource" runat="server" ConnectionString="<%$
ConnectionStrings:ADVENTUREWORKSConnectionString %>"
ConflictDetection="CompareAllValues"

SelectCommand="SELECT [ProductID], [Name], [ProductNumber], [Color],
[DaysToManufacture], [ListPrice], [DiscontinuedDate] FROM
[Production].[Product]"

DeleteCommand="DELETE FROM [Production].[Product] WHERE [ProductID] =
@original_ProductID AND [Name] = @original_Name AND [ProductNumber] =
@original_ProductNumber AND [Color] = @original_Color AND [DaysToManufacture] =
@original_DaysToManufacture AND [ListPrice] = @original_ListPrice AND
[DiscontinuedDate] = @original_DiscontinuedDate"

InsertCommand="INSERT INTO [Production].[Product] ([Name], [ProductNumber],
[Color], [DaysToManufacture], [ListPrice], [DiscontinuedDate]) VALUES (@Name,
@ProductNumber, @Color, @DaysToManufacture, @ListPrice, @DiscontinuedDate)"

OldValuesParameterFormatString="original_{0}"

UpdateCommand="UPDATE [Production].[Product] SET [Name] = @Name, [ProductNumber]
= @ProductNumber, [Color] = @Color, [DaysToManufacture] = @DaysToManufacture,
[ListPrice] = @ListPrice, [DiscontinuedDate] = @DiscontinuedDate WHERE
[ProductID] = @original_ProductID AND [Name] = @original_Name AND
[ProductNumber] = @original_ProductNumber AND [Color] = @original_Color AND
[DaysToManufacture] = @original_DaysToManufacture AND [ListPrice] =
@original_ListPrice AND [DiscontinuedDate] = @original_DiscontinuedDate">
<DeleteParameters>

     <asp:Parameter Name="original_EmployeeID"></asp:Parameter>
                                 Página 21 de 52
...

      <asp:Parameter Name="original_Photo"></asp:Parameter>

   </DeleteParameters>

   <UpdateParameters>

      <asp:Parameter Type="String" Name="LastName"></asp:Parameter>

      ...

      <asp:Parameter Name="original_Photo"></asp:Parameter>

   </UpdateParameters>

   <InsertParameters>

      <asp:Parameter Type="String" Name="LastName"></asp:Parameter>

      ...

      <asp:Parameter Name="Photo"></asp:Parameter>

   </InsertParameters>

</asp:SqlDataSource>

</form>




   10. Guarde el proyecto y ejecútelo en el navegador. Incluya un nuevo registro y
       guárdelo. Enseguida, modifique el contenido y guarde nuevamente.




                                     Página 22 de 52
El código de este ejercicio se encuentra en el ejemplo adjunto “DCE2005 Acceso a Datos”, en
la página “DetailsView.aspx”. Tenga en cuenta que en el ejercicio resuelto se utiliza una
“Master Page” y Themes para dar un formato y estilo amigable.




                                      Página 23 de 52
FormView
Objetivo: Construir un formulario con el control FormView para visualizar los
registros de la tabla “Customers” de la base de datos NorthWind.
NOTA: La serie de pasos utilizada en la resolución del presente ejercicio no necesariamente refleja las
mejores prácticas de Desarrollo y Arquitectura de aplicaciones empresariales establecidas por Microsoft.

   1. Agregue un nuevo Web Form en el Solution Explorer. Arrastre el control FormView
      hacia el formulario.




   2. La fuente de datos será un Database. Seleccione la tabla Customers de la base de
      datos Northwind y todos los campos.




                                          Página 24 de 52
3. Aplique un Auto Format según la opción.




4. Ajuste el layout de manera que quepan todos los datos.




                                Página 25 de 52
5. Guarde el proyecto y ejecútelo en el navegador. Navegue en las páginas para
   visualizar los registros.




                                Página 26 de 52
DataList
Objetivo: Construir un formulario con el control DataList. Este control
muestra diversos registros en la misma página en la que usted debe
determinar el área de datos y el respectivo layout.
NOTA: La serie de pasos utilizada en la resolución del presente ejercicio no necesariamente refleja las
mejores prácticas de Desarrollo y Arquitectura de aplicaciones empresariales establecidas por Microsoft.

   1. Agregue un nuevo Web Form al Solution Explorer.
      Arrastre el control DataList hacia el formulario.
      Como en los ejercicios anteriores seleccione el DataSource, en este caso
      seleccione la tabla Orders.




   2. Configure con AutoFormat para que el control tenga un aspecto de su agrado.




   3. Personalice el campo OrderDate para que la fecha sea mostrada en el formato
      adecuado.
      Para ello, seleccione el OrderDateLabel y el enlace Edit DataBindings.
      Configure el formato para Short Date.


                                          Página 27 de 52
4. Note que en el HTML, la propiedad clave para exhibir los datos es la Text donde
      usa el Eval(field).


<asp:DataList ID="DataList1" Runat="server“

          DataSourceID="SqlDataSource1" RepeatColumns="3">

<ItemTemplate>

   <b>OrderID: </b>

   <asp:Label ID="OrderIDLabel" Text='<%# Eval("OrderID") %>'/>

   OrderDate:

   <asp:Label ID="OrderDateLabel" Text='<%# Eval("OrderDate", "{0:d}")

   ...

   ShipCountry:

   <asp:Label ID="ShipCountryLabel" Text='<%# Eval("ShipCountry")%>'/>

  </ItemTemplate>

</asp:DataList>

<asp:SqlDataSource ID="SqlDataSource1" Runat="server“

    SelectCommand="SELECT [OrderID], [OrderDate], [ShipName],

    [ShipAddress], [ShipCity], [ShipCountry] FROM [Orders]“

    ConnectionString="<%$ ConnectionStrings:AppConnectionString1 %>">

</asp:SqlDataSource>


                                    Página 28 de 52
5. Guarde el proyecto y ejecútelo en el navegador.




                                 Página 29 de 52
Enlazando Datos con Objetos

Enlazando con la capa de acceso a Datos

Objetivo: Definir una clase de de Acceso a Datos (DAL) conteniendo
métodos para acceder a una base de datos que devuelvan un DataSet para
enlazar los datos en los controles que sean necesarios.
NOTA: La serie de pasos utilizada en la resolución del presente ejercicio no necesariamente refleja las
mejores prácticas de Desarrollo y Arquitectura de aplicaciones empresariales establecidas por Microsoft.

     1. En el Solution Explorer, agregue un nuevo proyecto tipo Class Library llamado
        DataAccess.

     2. Como accederemos al SQL Server, en la primera línea de la pantalla escriba los
        Namespaces que contienen los métodos y propiedades para efectuar el acceso.
        En este caso, el namespace que contiene la clase SqlClient, la cual fue creada para
        manipular datos con SQL Server 7 o superior.
VB.NET

Imports System.Data

Imports System.Data.SqlClient

C#

using System.Data;

using System.Data.SqlClient;




     3. Escriba el método llamado GetCategories que devuelve un DataSet.
        Este método:
           • utilizará el string de conexión llamado myConn que está almacenado en el
               archivo Web.Config;
           • define una instrucción SQL que selecciona todos los campos de la tabla
               Categories;
           • define la conexión y el Command que implementa el Select;
           • crea un DataAdapter y un DataSet;
           • completa el DataAdapter en el respectivo DataSet definido y lo devuelve.

          Mientras tanto, el método GetProducts recibe como argumento el código de la
         categoría y devuelve un Dataset con los productos de esa categoría.

                                          Página 30 de 52
Este código será usado como criterio en la instrucción SQL para investigar todos
         los productos de la respectiva categoría:


VB.NET

Public Class DataAccess

    Public Shared Function GetCategories() As DataSet

        Dim conexion As String =
ConfigurationSettings.ConnectionStrings(“myConn").ConnectionString()

           Dim sql As String = "SELECT * FROM Categories"

           Dim conn As New SqlConnection(conexion)

           Dim command As New SqlCommand(sql, conn)

           Dim adapter As New SqlDataAdapter(command)

           Dim ds As New DataSet

           adapter.Fill(ds)

           Return ds

    End Function



    Public Shared Function GetProducts(ByVal cat As Integer) As DataSet

        Dim conexion As String =
ConfigurationSettings.ConnectionStrings(“myConn").ConnectionString()

           Dim conn As New SqlConnection(conexion)

           Dim command As New SqlCommand()

           command.Connection = conn

           command.CommandType = CommandType.Text

           command.Parameters.Add(New SqlParameter("@cat", cat))

        command.CommandText = "SELECT ProductID, ProductName, UnitPrice,
UnitsInStock FROM Products WHERE categoryID=@cat"

           Dim adapter As New SqlDataAdapter(command)

           Dim ds As New DataSet

           adapter.Fill(ds)


                                       Página 31 de 52
Return ds

     End Function

End Class



C#

public class DataAccess

{

     public static DataSet GetCategories()

     {

         string conexion = "Database=northwind;server=(local);user id=sa ";

         string sql = "SELECT * FROM Categories";

         SqlConnection conn = new SqlConnection(conexion);

         SqlCommand   command = new SqlCommand(sql, conn);

         SqlDataAdapter adapter = new SqlDataAdapter(command);

         DataSet ds = new DataSet();

         adapter.Fill(ds);

         return ds;

     }

     public static DataSet GetProducts(int cat)

     {

         string conexion = "Database=northwind;server=(local);user id=sa";

         SqlConnection conn = new SqlConnection(conexion);

         SqlCommand command = new SqlCommand();

         command.Connection = conn;

         command.CommandType = CommandType.Text;

         command.Parameters.Add(new SqlParameter("@cat", cat));

        command.CommandText = "SELECT ProductID, ProductName, UnitPrice,
UnitsInStock FROM Products WHERE categoryID=@cat";


                                   Página 32 de 52
SqlDataAdapter adapter = new SqlDataAdapter(command);

         DataSet ds = new DataSet();

         adapter.Fill(ds);

         return ds;

     }

}


    4. Guarde el proyecto. Agregue un nuevo Web Form en el Solution Explorer. Escriba
       Categorías y arrastre el control DropDownList hacia el formulario. En la Smart Tag,
       seleccione el checkbox AutoPostBack para enviar el contenido de este control al
       servidor.




    5. Para la fuente de datos seleccione Object, ya que usaremos la clase definida
       anteriormente. En caso de que desee alterar el nombre del DataSource, siéntase
       libre de hacerlo.




                                     Página 33 de 52
6. En el Tab Select se muestran todos los métodos existentes. Seleccione el
   GetCategories y observe que el tipo de retorno es un DataSet.




                                 Página 34 de 52
7. Como el control es un DropDownList, escriba CategoryName en “Data Field to
   Display”, porque es aquí que el campo será exhibido. Por otra parta, el ”Data Field
   for the Value” es el campo que será almacenado cuando el usuario seleccione un
   ítem, por lo tanto escriba CategoryID.




8. A continuación Construiremos en el formulario un GridView para mostrar todos los
   productos de la respectiva categoría. Seleccione como Data Source el Object
   DataAccess y el método GetProducts.




                                  Página 35 de 52
9. Como este método requiere un parámetro, hay que especificar que vendrá del
   control DropDownList1, para esto seleccione en el combo ParameterSource la
   opción “Control”, y seleccione en el combo “ControlId”, el control que corresponda.




                                  Página 36 de 52
10. En la Smart Tag, habilite la paginación y el ordenamiento, y configure el formato
    para la grilla que sea de su agrado.




                                  Página 37 de 52
11. Guarde el proyecto y ejecútelo en el navegador. Seleccione otras categorías y vea
    que el GridView muestra todos los productos de la categoría seleccionada.




                                 Página 38 de 52
Enlazando a una Clase de Negocios

Objetivo: Obtener los departamentos de la base de datos AdventureWorks
según el grupo solicitado por el cliente (se utilizará la tabla “Department”).
Definir un componente de negocios que implemente “reglas” a los datos
obtenidos del componente de acceso a datos.
Implementar el componente dentro de la carpeta virtual “App_Code”.
NOTA: La serie de pasos utilizada en la resolución del presente ejercicio no necesariamente refleja las
mejores prácticas de Desarrollo y Arquitectura de aplicaciones empresariales establecidas por Microsoft.



   1. En el Solution Explorer, con el botón derecho del Mouse sobre el proyecto agregue
      la carpeta virtual “App_Code”:




                                          Página 39 de 52
2. Dentro de la carpeta generada, incorpore tres clases: “AccesoDatos.cs”,
        “CapaDeNegocio.cs” y “Departamento.cs”.
        Veamos primero la clase de acceso a datos:

//Se incluyen las referencias necesarias, además de las de acceso a
//datos y Sql, los namespaces “using System.Collections.Generic” y
//“using System.Text” serán utilizados para poder utilizar una lista
//generica para la devolucion de datos y un contructor de cadenas para
//crear la cadena de consultas.

VB.NET

Imports System.Data

Imports System.Data.SqlClient

Imports System.Collections.Generic

Imports System.Text

C#

using System.Data;

using System.Collections.Generic;

using System.Text;

using System.Data.SqlClient;


     3. En esta clase que simula el componente de acceso a datos, hay que incorporar un
        método que devuelva los Departamentos por grupos, de acuerdo al requisito. La
        clase completa se encuentra en el proyecto “DCE2005 Acceso a Datos”, que
        también posee un método para devolver los grupos en que se dividen los
        departamentos.

VB.NET

Public Function ObtenerDepartamentos(ByVal grupo As String) As List(Of
Departamento)
        Dim departamentos As List(Of Departamento) = New List(Of Departamento)
        Dim query As StringBuilder = New StringBuilder
        query.Append("SELECT ")
        query.Append("DepartmentID, ")
        query.Append("Name, ")
        query.Append("ModifiedDate ")
        query.Append("FROM [HumanResources].[Department] ")
        query.AppendFormat("WHERE GroupName = '{0}' ", grupo)
        query.Append("Order By Name")
        Dim command As SqlCommand = New SqlCommand
        command.CommandText = query.ToString
                                      Página 40 de 52
Dim conn As SqlConnection = New
SqlConnection(ConfigurationManager.ConnectionStrings("ADVENTUREWORKSConnectionSt
ring").ConnectionString)

        command.Connection = conn
        Try
            conn.Open()
            ' Using
            Dim dr As SqlDataReader = command.ExecuteReader
            Try
                If dr.HasRows Then
                  While dr.Read
                      Dim dep As Departamento = New
Departamento(Convert.ToInt32(dr(0)), dr(1).ToString, grupo,
Convert.ToDateTime(dr(2)))

                     departamentos.Add(dep)
                 End While
              End If
           Finally
                CType(dr, IDisposable).Dispose()
           End Try
        Catch ex As Exception
           Throw ex
        Finally
            conn.Close()
        End Try

        Return departamentos
End Function




                                 Página 41 de 52
C#
/// <summary>
/// Este metodo obtiene los departamentos por grupos.
/// </summary>
/// <param name="grupo">El grupo seleccionado del combo</param>
/// <returns>Una lista de departamentos.</returns>
public List<Departamento> ObtenerDepartamentos(string grupo)
{
         List<Departamento> departamentos = new List<Departamento>();
         StringBuilder query = new StringBuilder();
         query.Append("SELECT ");
         query.Append("DepartmentID, ");
         query.Append("Name, ");
         query.Append("ModifiedDate ");
         query.Append("FROM [HumanResources].[Department] ");
         query.AppendFormat("WHERE GroupName = '{0}' ", grupo);
         query.Append("Order By Name");

        SqlCommand command = new SqlCommand();
        command.CommandText = query.ToString();

        SqlConnection conn = new SqlConnection(
               ConfigurationManager.ConnectionStrings[
               "ADVENTUREWORKSConnectionString" ].ConnectionString);
        command.Connection = conn;
        try
        {
            conn.Open();
            using (SqlDataReader dr = command.ExecuteReader())
            {
               if (dr.HasRows)
               {
                       while(dr.Read())
                        {
                            Departamento dep = new Departamento(
                                Convert.ToInt32( dr[0]),
                                               dr[1].ToString(),
                                               grupo ,
                                               Convert.ToDateTime(dr[2])
                                );
                                departamentos.Add(dep);
                          }
                    }
                 }
        }
        catch (Exception ex)
        {
              throw ex;
        }
        finally
        {
              conn.Close();
        }
        return departamentos;
    }

}
                                 Página 42 de 52
4. Otra clase necesaria, para poder desarrollar el método anterior es la clase
        “Departamento.cs”, esta clase contendrá las propiedades y métodos necesarios
        para crear el objeto “Departamento” con que se llenará la lista.
        Puede ver esta clase en el proyecto “DCE2005 Acceso a Datos”.

     5. Por último, la clase “CapaDeNegocios”, simula un componente de negocios, en este
        caso y para simplificar el ejemplo, no se aplican reglas de validación, o propias del
        negocio, solo se invocan los métodos del componente de acceso a datos.
        Los accesos se realizan por medio de la clase “AccesoDatos.cs”, que simula una
        capa de datos, y utiliza la clase Departamento, ya que es con objetos de este tipo
        en los que se basa el ejercicio.
        Los métodos más importantes de la capa de negocios, contra los que se enlazaran
        los datos en los controles son los siguientes:
VB.NET

Public Function ObtenerDepartamentosPorGrupo(ByVal grupo As String) As List( of
Departamento)
        'Definir y agregar las reglas de negocio
        Dim ad As AccesoDatos = New AccesoDatos
        Return ad.ObtenerDepartamentos(grupo)
End Function


C#

public List<Departamento> ObtenerDepartamentosPorGrupo(string grupo)
{
   //Definir y agregar reglas de negocio
   AccesoDatos ad = new AccesoDatos();
   return ad.ObtenerDepartamentos(grupo);

}

     6. Una vez armadas las 3 clases, agregue un nuevo Web Form en el Solution Explorer
        y llámelo “BindingToBusinessLayer”.
        Con ASP.NET 2.0 puede también arrastrar y pegar los controles en la solapa
        “Source”, entonces, desde la solapa “Source” incorpore un control “Label”, un
        control “DropDownList” y un control “GridView”.

         En el ejercicio resuelto, se esta trabajando con una página maestra y temas, para
         mantener una interfaz uniforme, además previamente a la incorporación de los
         controles se incorporo una tabla de html para darle la estructura a la página. En la
         porción de código copiada aquí, no se incluyen comentarios.

         Para ver la versión completa con comentarios, vea el ejercicio “DCE2005 Acceso a
         Datos”, la clase “BindingToBusinessLayer.aspx”



                                        Página 43 de 52
Con la utilización del tema a nivel de aplicación, el código html queda más limpio, ya
      que no es necesario incluir propiedades de estilo (y comportamiento) en el html:

ASP .NET

<table>
<tr>
     <td>
         <asp:Label ID="lblGrupo" runat="server" CssClass="Label" >
               Seleccione un grupo:</asp:Label>
     </td>
     <td align=left width="83%">
         <asp:DropDownList ID="cmbGrupos" runat="server"
               CssClass="Text" DataSourceID="dsGrupos"
               AutoPostBack="true">
         </asp:DropDownList><br />
     </td>
</tr>
<tr height="50px"><td></td></tr>
<tr>
      <td colspan="2" align=center>
           <asp:GridView ID="drDepartamentos" runat="server"
                        DataSourceID="dsDepartamentos"
                        AutoGenerateColumns="false">
             <Columns>
                <asp:BoundField HeaderText="Codigo"
                        DataField="DepartamentoID"
                        ItemStyle-HorizontalAlign="right" />
                <asp:BoundField HeaderText="Departamento"
                        DataField="Nombre"
                        ItemStyle-HorizontalAlign="Left" />
                <asp:BoundField HeaderText="Grupo" DataField="Grupo"
                        ItemStyle-HorizontalAlign="Left" />
                <asp:BoundField HeaderText="Fecha"
                        DataField="FechaModificacion"
                        ItemStyle-HorizontalAlign="right" />
              </Columns>
           </asp:GridView>
       </td>
</tr>
</table>


   Observe que al no permitir que la grilla “auto genere las columnas” (propiedad:
   AutoGenerateColumns="false"), hay que definir explícitamente cada columna a
   mostrar.
   La propiedad DataField, hace referencia al campo que devuelve la consulta a la base
   de datos, enlazando la información a mostrar en cada columna.
   7. Las fuentes de datos utilizadas en el ejercicio, fueron incorporadas del ToolBox, y
      configuradas como sigue:

ASP .NET



                                     Página 44 de 52
<!--Control Datasource para llenar la grilla de departamentos. Mediante el
parametro se indica la relacion entre el combo y la grilla-->
<asp:ObjectDataSource ID="dsDepartamentos" runat=server
        TypeName="Departamentos.CapaDeNegocio"
        SelectMethod="ObtenerDepartamentosPorGrupo"
        DataObjectTypeName="Departamentos.Departamento">
        <SelectParameters>
           <asp:ControlParameter DefaultValue="Quality Assurance"
                       Name="grupo" Type="String" ControlID="cmbGrupos"
                       PropertyName="SelectedValue" />
        </SelectParameters>
</asp:ObjectDataSource>
<!-- Control Datasource para llenar el combo de grupos -->
<asp:ObjectDataSource ID="dsGrupos" runat="server"
   TypeName="Departamentos.CapaDeNegocio" SelectMethod="ObtenerGrupos">
</asp:ObjectDataSource>

   8. Puede ver el código completo en el ejercicio antes mencionado, el resultado es el
      siguiente:




Tenga en cuenta que en la vista de diseño, mediante el smart tag puede configurar el
control “ObjectDataSource” seleccionando la clase de la capa de negocios, y los métodos
para realizar el enlace de datos a los controles, de manera similar al ejercicio anterior.




                                     Página 45 de 52
TREEVIEW + XML
Objetivo: Definir un archivo XML y utilizarlo como fuente de datos para un
control TreeView.
NOTA: La serie de pasos utilizada en la resolución del presente ejercicio no necesariamente refleja las
mejores prácticas de Desarrollo y Arquitectura de aplicaciones empresariales establecidas por Microsoft.

   1. En el Solution Explorer, agregue un nuevo ítem de tipo XML File llamado myXML
      con la siguiente estructura.
<?xml version="1.0" encoding="utf-8" ?>

<collection>

  <book>

     <title>asp.NET</title>

     <author>dino esposito</author>

     <publisher>ms press</publisher>

  </book>

  <book>

     <title>sql reporting services</title>

     <author>tom cruise</author>

     <publisher>ms press</publisher>

  </book>

</collection>


   2. Agregue un nuevo Web Form. Arrastre el control TreeView hacia el formulario y
      asocie como fuente de datos el archivo XML creado anteriormente.




                                          Página 46 de 52
3. Defina un Auto Format según la opción para presentar los datos jerárquicos de
   manera viable.




                                 Página 47 de 52
Página 48 de 52
TREEVIEW + DataAdapter
Objetivo: Escribir un código que leerá una tabla en el banco de datos,
Construir un DataAdapter y completar un control TreeView.
NOTA: La serie de pasos utilizada en la resolución del presente ejercicio no necesariamente refleja las
mejores prácticas de Desarrollo y Arquitectura de aplicaciones empresariales establecidas por Microsoft.

   1. En el Solution Explorer, Agregue un nuevo formulario conteniendo un control
      TreeView.
      Como escribiremos el código directamente en el HTML, en el pie de página, haga
      click en el botón HTML y escriba el siguiente código que leerá dos tablas
      (Categories y Products) de la base de datos Northwind, construirá en memoria una
      relación entre las claves y lo usará como fuente de datos para construir el control
      TreeView. Como este control requiere datos jerárquicos, entonces construiremos un
      nivel con las categorías y otro nivel con los productos de las respectivas categorías.
VB.NET

<%@ Page Language="VB" %>

<%@ Import Namespace="System.Data" %>

<%@ Import Namespace="System.Data.SqlClient" %>



<script runat="server">

     Dim conexao As String = "Server=localhost;Database=Northwind;user id=sa"



     Sub Page_Load()

          If Not Page.IsPostBack Then

               FillNodes()

          End If

     End Sub



     Sub FillNodes()

          Dim ds As DataSet = GetData()

          For Each masterRow As DataRow In ds.Tables("Categories").Rows

               Dim masterNode As New TreeNode(masterRow("CategoryName").ToString())

                                          Página 49 de 52
TreeView1.Nodes.Add(masterNode)

                For Each childRow As DataRow In masterRow.GetChildRows("Children")

                Dim childNode As New
TreeNode(childRow("ProductName").ToString())

                       masterNode.ChildNodes.Add(childNode)

                Next

         Next

     End Sub



Function GetData() As DataSet

         Dim conn As SqlConnection = New SqlConnection(conexao)

         Dim sqlCat As String = "SELECT CategoryID, CategoryName FROM Categories"

         Dim sqlProd As String = "SELECT CategoryID, ProductName FROM Products"

         Dim daCat As SqlDataAdapter = New SqlDataAdapter(sqlCat, conn)

         Dim daProd As SqlDataAdapter = New SqlDataAdapter(sqlProd, conn)

         Dim ds As DataSet = New DataSet()

         daCat.Fill(ds, "Categories")

         daProd.Fill(ds, "Products")

         ds.Relations.Add("Children", _

                ds.Tables("Categories").Columns("CategoryID"), _

                ds.Tables("Products").Columns("CategoryID"))

         Return ds

End Function



</script>



C#

<%@ Page Language="C#" %>


                                        Página 50 de 52
<%@ Import Namespace="System.Data" %>

<%@ Import Namespace="System.Data.SqlClient" %>



<script runat="server">

    const string connString = "Server=localhost;Database=Northwind;user id=sa";

    void Page_Load()

    {

        if (! Page.IsPostBack)

            FillNodes();

    }



    void FillNodes()

    {

        DataSet dst = GetData();

        foreach (DataRow masterRow in dst.Tables["Categories"].Rows)

        {

            TreeNode masterNode = new
TreeNode((string)masterRow["CategoryName"]);

            TreeView1.Nodes.Add(masterNode);

            foreach (DataRow childRow in masterRow.GetChildRows("Children"))

            {

                TreeNode childNode = new
TreeNode((string)childRow["ProductName"]);

                masterNode.ChildNodes.Add(childNode);

            }

        }

    }



DataSet GetData()

                                   Página 51 de 52
{

        SqlConnection conn = new SqlConnection(connString);

        string sqlCat = "Select CategoryID, CategoryName FROM Categories";

        string sqlProd = "Select CategoryID, ProductName FROM Products";

        SqlDataAdapter daCat = new SqlDataAdapter(sqlCat, conn);

        SqlDataAdapter daProd = new SqlDataAdapter(sqlProd, conn);

        DataSet ds = new DataSet();

        daCat.Fill(ds, "Categories");

        daProd.Fill(ds, "Products");

        ds.Relations.Add("Children",

            ds.Tables["Categories"].Columns["CategoryID"],

            ds.Tables["Products"].Columns["CategoryID"]);

        return ds;

    }

</script>




                                  Página 52 de 52

Weitere ähnliche Inhalte

Was ist angesagt?

Bases de Datos Semanticas
Bases de Datos SemanticasBases de Datos Semanticas
Bases de Datos SemanticasErik Guerrero
 
Sql DML Lenguaje de manipulación de datos
Sql DML Lenguaje de manipulación de datos Sql DML Lenguaje de manipulación de datos
Sql DML Lenguaje de manipulación de datos josecuartas
 
El modelo entidad_relacion
El modelo entidad_relacionEl modelo entidad_relacion
El modelo entidad_relacionLuis Lucho
 
Diccionario De Datos
Diccionario De DatosDiccionario De Datos
Diccionario De Datosnahun1385
 
Desarrollo de aplicaciones web con casos de uso
Desarrollo de aplicaciones web  con casos de usoDesarrollo de aplicaciones web  con casos de uso
Desarrollo de aplicaciones web con casos de usoJosafat Mtz
 
6.modelado de los requerimientos escenarios y clases
6.modelado de los requerimientos  escenarios y clases6.modelado de los requerimientos  escenarios y clases
6.modelado de los requerimientos escenarios y clasesRamiro Estigarribia Canese
 
Tema2: Tecnologías de desarrollo web (Desarrollo Aplicaciones Web)
Tema2: Tecnologías de desarrollo web (Desarrollo Aplicaciones Web)Tema2: Tecnologías de desarrollo web (Desarrollo Aplicaciones Web)
Tema2: Tecnologías de desarrollo web (Desarrollo Aplicaciones Web)Micael Gallego
 
Unidad 3 Modelamiento De Datos Conceptual
Unidad 3 Modelamiento De Datos ConceptualUnidad 3 Modelamiento De Datos Conceptual
Unidad 3 Modelamiento De Datos ConceptualSergio Sanchez
 
Modelo jerarquico y modelo de red de base de datos
Modelo jerarquico y modelo de red de base de datosModelo jerarquico y modelo de red de base de datos
Modelo jerarquico y modelo de red de base de datosFernando Baculima
 

Was ist angesagt? (20)

Bases de Datos Semanticas
Bases de Datos SemanticasBases de Datos Semanticas
Bases de Datos Semanticas
 
Sql DML Lenguaje de manipulación de datos
Sql DML Lenguaje de manipulación de datos Sql DML Lenguaje de manipulación de datos
Sql DML Lenguaje de manipulación de datos
 
Consultas base de datos en SQL
Consultas base de datos en SQLConsultas base de datos en SQL
Consultas base de datos en SQL
 
El modelo entidad_relacion
El modelo entidad_relacionEl modelo entidad_relacion
El modelo entidad_relacion
 
Diccionario De Datos
Diccionario De DatosDiccionario De Datos
Diccionario De Datos
 
Diagramas y Carta estructurada
Diagramas y Carta estructuradaDiagramas y Carta estructurada
Diagramas y Carta estructurada
 
Desarrollo de aplicaciones web con casos de uso
Desarrollo de aplicaciones web  con casos de usoDesarrollo de aplicaciones web  con casos de uso
Desarrollo de aplicaciones web con casos de uso
 
6.modelado de los requerimientos escenarios y clases
6.modelado de los requerimientos  escenarios y clases6.modelado de los requerimientos  escenarios y clases
6.modelado de los requerimientos escenarios y clases
 
Tema2: Tecnologías de desarrollo web (Desarrollo Aplicaciones Web)
Tema2: Tecnologías de desarrollo web (Desarrollo Aplicaciones Web)Tema2: Tecnologías de desarrollo web (Desarrollo Aplicaciones Web)
Tema2: Tecnologías de desarrollo web (Desarrollo Aplicaciones Web)
 
Csv y xml
Csv y xmlCsv y xml
Csv y xml
 
Diagramas UML
Diagramas UMLDiagramas UML
Diagramas UML
 
Windows forms c# visual basic .net ejercicios
Windows forms c# visual basic .net ejerciciosWindows forms c# visual basic .net ejercicios
Windows forms c# visual basic .net ejercicios
 
Preguntas JAVA.docx
Preguntas JAVA.docxPreguntas JAVA.docx
Preguntas JAVA.docx
 
Funcion si de excel
Funcion si de excelFuncion si de excel
Funcion si de excel
 
Unidad 3 Modelamiento De Datos Conceptual
Unidad 3 Modelamiento De Datos ConceptualUnidad 3 Modelamiento De Datos Conceptual
Unidad 3 Modelamiento De Datos Conceptual
 
Ej Normalizacion Juan Glz
Ej Normalizacion Juan GlzEj Normalizacion Juan Glz
Ej Normalizacion Juan Glz
 
Fundamentos de las bases de datos
Fundamentos de las bases de datosFundamentos de las bases de datos
Fundamentos de las bases de datos
 
Lifo round robín informatica
Lifo round robín informatica Lifo round robín informatica
Lifo round robín informatica
 
Modelo jerarquico y modelo de red de base de datos
Modelo jerarquico y modelo de red de base de datosModelo jerarquico y modelo de red de base de datos
Modelo jerarquico y modelo de red de base de datos
 
Ejemplo de diseño lógico estructurado
Ejemplo de diseño lógico estructuradoEjemplo de diseño lógico estructurado
Ejemplo de diseño lógico estructurado
 

Andere mochten auch

Practica de visual basic sistema de facturación
Practica de visual basic sistema de facturaciónPractica de visual basic sistema de facturación
Practica de visual basic sistema de facturaciónmilenka796
 
SISTEMA DE FACTURACION (Ejemplo desarrollado)
SISTEMA DE FACTURACION (Ejemplo desarrollado)SISTEMA DE FACTURACION (Ejemplo desarrollado)
SISTEMA DE FACTURACION (Ejemplo desarrollado)Darwin Durand
 
diagrama de casos de uso del negocio y del sistema
diagrama de casos de uso del negocio y del sistemadiagrama de casos de uso del negocio y del sistema
diagrama de casos de uso del negocio y del sistemaUniversidad Tecnológica
 

Andere mochten auch (6)

Practica de visual basic sistema de facturación
Practica de visual basic sistema de facturaciónPractica de visual basic sistema de facturación
Practica de visual basic sistema de facturación
 
Diagrama de casos de usos
Diagrama de casos de usosDiagrama de casos de usos
Diagrama de casos de usos
 
SISTEMA DE FACTURACION (Ejemplo desarrollado)
SISTEMA DE FACTURACION (Ejemplo desarrollado)SISTEMA DE FACTURACION (Ejemplo desarrollado)
SISTEMA DE FACTURACION (Ejemplo desarrollado)
 
diagrama de casos de uso del negocio y del sistema
diagrama de casos de uso del negocio y del sistemadiagrama de casos de uso del negocio y del sistema
diagrama de casos de uso del negocio y del sistema
 
Capitulo 11-12
Capitulo 11-12Capitulo 11-12
Capitulo 11-12
 
[Curso MVC] ViewModels y Validacion
[Curso MVC] ViewModels y Validacion[Curso MVC] ViewModels y Validacion
[Curso MVC] ViewModels y Validacion
 

Ähnlich wie Dce2 ejercicios asp.net

Org tutorial struts_2010
Org tutorial struts_2010Org tutorial struts_2010
Org tutorial struts_2010Omar Rios
 
Tutorial - Crea un modelo de clasificación con Azure Machine Learning designer
Tutorial - Crea un modelo de clasificación con Azure Machine Learning designerTutorial - Crea un modelo de clasificación con Azure Machine Learning designer
Tutorial - Crea un modelo de clasificación con Azure Machine Learning designerLuis Beltran
 
Taller básico de JOINS, SUBQUERYING, APPLY, CTE
Taller básico de JOINS, SUBQUERYING, APPLY, CTETaller básico de JOINS, SUBQUERYING, APPLY, CTE
Taller básico de JOINS, SUBQUERYING, APPLY, CTEJulián Castiblanco
 
Parte I. Notas Rapidas (sticky notes) App w8: MVVM y SQLite
Parte I. Notas Rapidas (sticky notes) App w8: MVVM y SQLiteParte I. Notas Rapidas (sticky notes) App w8: MVVM y SQLite
Parte I. Notas Rapidas (sticky notes) App w8: MVVM y SQLiteJuan Manuel
 
Actividad4 interfaz_graficafinal_edwin_rodriguez .docx
 Actividad4 interfaz_graficafinal_edwin_rodriguez .docx Actividad4 interfaz_graficafinal_edwin_rodriguez .docx
Actividad4 interfaz_graficafinal_edwin_rodriguez .docxedwin andres
 
Manual
ManualManual
Manualvicosw
 
bases de datos desde visual basic
bases de datos desde visual basicbases de datos desde visual basic
bases de datos desde visual basicsantiagomario8
 
Conectar con bases de datos
Conectar con bases de datosConectar con bases de datos
Conectar con bases de datosRafael Quintero
 
Reportes y graficos en .net
Reportes y graficos en .net Reportes y graficos en .net
Reportes y graficos en .net Juan Villena
 
Manual acceso a datos vb.net
Manual acceso a datos vb.netManual acceso a datos vb.net
Manual acceso a datos vb.netcedido
 
Presentación sobre Display Suite en el Drupal Day Valencia 2012
Presentación sobre Display Suite en el Drupal Day Valencia 2012Presentación sobre Display Suite en el Drupal Day Valencia 2012
Presentación sobre Display Suite en el Drupal Day Valencia 2012Atenea tech
 
Presentación de Minería de Datos_ Adventure Works
Presentación de Minería de Datos_ Adventure WorksPresentación de Minería de Datos_ Adventure Works
Presentación de Minería de Datos_ Adventure WorksGustavo Rene Rojas Valdez
 
Tutorial aprendiendo a programar
Tutorial aprendiendo a programarTutorial aprendiendo a programar
Tutorial aprendiendo a programarEduardo Méndez
 
Tutorial aprendiendo a programar
Tutorial aprendiendo a programarTutorial aprendiendo a programar
Tutorial aprendiendo a programarJuan Hoyos
 

Ähnlich wie Dce2 ejercicios asp.net (20)

Org tutorial struts_2010
Org tutorial struts_2010Org tutorial struts_2010
Org tutorial struts_2010
 
Tutorial - Crea un modelo de clasificación con Azure Machine Learning designer
Tutorial - Crea un modelo de clasificación con Azure Machine Learning designerTutorial - Crea un modelo de clasificación con Azure Machine Learning designer
Tutorial - Crea un modelo de clasificación con Azure Machine Learning designer
 
Ejercicio practico sql
Ejercicio practico sqlEjercicio practico sql
Ejercicio practico sql
 
Ejercicio practico sql
Ejercicio practico sqlEjercicio practico sql
Ejercicio practico sql
 
Taller básico de JOINS, SUBQUERYING, APPLY, CTE
Taller básico de JOINS, SUBQUERYING, APPLY, CTETaller básico de JOINS, SUBQUERYING, APPLY, CTE
Taller básico de JOINS, SUBQUERYING, APPLY, CTE
 
Parte I. Notas Rapidas (sticky notes) App w8: MVVM y SQLite
Parte I. Notas Rapidas (sticky notes) App w8: MVVM y SQLiteParte I. Notas Rapidas (sticky notes) App w8: MVVM y SQLite
Parte I. Notas Rapidas (sticky notes) App w8: MVVM y SQLite
 
Actividad4 interfaz_graficafinal_edwin_rodriguez .docx
 Actividad4 interfaz_graficafinal_edwin_rodriguez .docx Actividad4 interfaz_graficafinal_edwin_rodriguez .docx
Actividad4 interfaz_graficafinal_edwin_rodriguez .docx
 
Manual
ManualManual
Manual
 
Cabde tutorial
Cabde tutorialCabde tutorial
Cabde tutorial
 
Proyecto visual studio
Proyecto visual studioProyecto visual studio
Proyecto visual studio
 
bases de datos desde visual basic
bases de datos desde visual basicbases de datos desde visual basic
bases de datos desde visual basic
 
Conectar con bases de datos
Conectar con bases de datosConectar con bases de datos
Conectar con bases de datos
 
Programacion2
Programacion2Programacion2
Programacion2
 
Reportes y graficos en .net
Reportes y graficos en .net Reportes y graficos en .net
Reportes y graficos en .net
 
Tema 3
Tema 3Tema 3
Tema 3
 
Manual acceso a datos vb.net
Manual acceso a datos vb.netManual acceso a datos vb.net
Manual acceso a datos vb.net
 
Presentación sobre Display Suite en el Drupal Day Valencia 2012
Presentación sobre Display Suite en el Drupal Day Valencia 2012Presentación sobre Display Suite en el Drupal Day Valencia 2012
Presentación sobre Display Suite en el Drupal Day Valencia 2012
 
Presentación de Minería de Datos_ Adventure Works
Presentación de Minería de Datos_ Adventure WorksPresentación de Minería de Datos_ Adventure Works
Presentación de Minería de Datos_ Adventure Works
 
Tutorial aprendiendo a programar
Tutorial aprendiendo a programarTutorial aprendiendo a programar
Tutorial aprendiendo a programar
 
Tutorial aprendiendo a programar
Tutorial aprendiendo a programarTutorial aprendiendo a programar
Tutorial aprendiendo a programar
 

Mehr von Instituto Centro de Sistemas (System Center) (6)

Guia programacon formulario cambiar clave
Guia programacon formulario cambiar claveGuia programacon formulario cambiar clave
Guia programacon formulario cambiar clave
 
Guia programacion de reportes
Guia programacion de reportesGuia programacion de reportes
Guia programacion de reportes
 
Guia programacion consulta de registros
Guia programacion  consulta de registrosGuia programacion  consulta de registros
Guia programacion consulta de registros
 
Guia programacion acceso al asistema
Guia programacion  acceso al asistemaGuia programacion  acceso al asistema
Guia programacion acceso al asistema
 
Guia proyecto software clinica
Guia proyecto software clinicaGuia proyecto software clinica
Guia proyecto software clinica
 
Los mi dlets_imprimible
Los mi dlets_imprimibleLos mi dlets_imprimible
Los mi dlets_imprimible
 

Kürzlich hochgeladen

SISTEMA TBI CHRYSLER UNIDAD 2.pptxxxxxcx
SISTEMA TBI CHRYSLER UNIDAD 2.pptxxxxxcxSISTEMA TBI CHRYSLER UNIDAD 2.pptxxxxxcx
SISTEMA TBI CHRYSLER UNIDAD 2.pptxxxxxcxdenilsonaldahir2
 
GESTIÓN POR RESULTADOS EN EL SECTOR PÚBLICO.pptx
GESTIÓN POR RESULTADOS EN EL SECTOR PÚBLICO.pptxGESTIÓN POR RESULTADOS EN EL SECTOR PÚBLICO.pptx
GESTIÓN POR RESULTADOS EN EL SECTOR PÚBLICO.pptxFernandoEstradaGimen
 
NX-400-FALCON-COSTARICA-Manual-Usuario.pdf
NX-400-FALCON-COSTARICA-Manual-Usuario.pdfNX-400-FALCON-COSTARICA-Manual-Usuario.pdf
NX-400-FALCON-COSTARICA-Manual-Usuario.pdfDanielMangoldNieves
 
Dibujo técnico - Teoria de Tolerancias y Ajustes.pdf
Dibujo técnico - Teoria de Tolerancias y Ajustes.pdfDibujo técnico - Teoria de Tolerancias y Ajustes.pdf
Dibujo técnico - Teoria de Tolerancias y Ajustes.pdfHaroldJaimeSanchezMi
 
3.BATERIA y sus princiaples componentes internos que llleva para su correcto uso
3.BATERIA y sus princiaples componentes internos que llleva para su correcto uso3.BATERIA y sus princiaples componentes internos que llleva para su correcto uso
3.BATERIA y sus princiaples componentes internos que llleva para su correcto usofranklintrinidad00
 
https://es.slideshare.net/karolpr/normasdeauditoriagubernamentalpptx
https://es.slideshare.net/karolpr/normasdeauditoriagubernamentalpptxhttps://es.slideshare.net/karolpr/normasdeauditoriagubernamentalpptx
https://es.slideshare.net/karolpr/normasdeauditoriagubernamentalpptxMartinMezarina1
 
Citroen C5 Aircross manual de utilizacion.pdf
Citroen C5 Aircross manual de utilizacion.pdfCitroen C5 Aircross manual de utilizacion.pdf
Citroen C5 Aircross manual de utilizacion.pdfmanonon
 
Refrigeración Automotriz(aire acondicionado)..pptx
Refrigeración Automotriz(aire acondicionado)..pptxRefrigeración Automotriz(aire acondicionado)..pptx
Refrigeración Automotriz(aire acondicionado)..pptxretrixx40
 
capacitacion-para-limpieza-en-laboratorios-1.ppt
capacitacion-para-limpieza-en-laboratorios-1.pptcapacitacion-para-limpieza-en-laboratorios-1.ppt
capacitacion-para-limpieza-en-laboratorios-1.pptMonicaEsterMosqueraM
 
RESOLUCIÓN RAZ LÓGICO 07_PLANTEAMIENTO PROBLEMAS_1613418128.pdf
RESOLUCIÓN RAZ LÓGICO 07_PLANTEAMIENTO PROBLEMAS_1613418128.pdfRESOLUCIÓN RAZ LÓGICO 07_PLANTEAMIENTO PROBLEMAS_1613418128.pdf
RESOLUCIÓN RAZ LÓGICO 07_PLANTEAMIENTO PROBLEMAS_1613418128.pdfnoimi trujillo gutierrez
 
SESION DE APRENDIZAJE LOS SENTIDOS Y SUS CUIDADOS
SESION DE APRENDIZAJE LOS SENTIDOS Y SUS CUIDADOSSESION DE APRENDIZAJE LOS SENTIDOS Y SUS CUIDADOS
SESION DE APRENDIZAJE LOS SENTIDOS Y SUS CUIDADOSAnaRuiz123884
 
VALORIZACION DE MINERALES.pptx VALORIZACION DE MINERALES.pptx
VALORIZACION DE MINERALES.pptx VALORIZACION DE MINERALES.pptxVALORIZACION DE MINERALES.pptx VALORIZACION DE MINERALES.pptx
VALORIZACION DE MINERALES.pptx VALORIZACION DE MINERALES.pptxMartinMezarina1
 
Sistema electrico camion VW worker. 15.190pdf
Sistema electrico camion VW worker. 15.190pdfSistema electrico camion VW worker. 15.190pdf
Sistema electrico camion VW worker. 15.190pdfSandro Martin
 

Kürzlich hochgeladen (13)

SISTEMA TBI CHRYSLER UNIDAD 2.pptxxxxxcx
SISTEMA TBI CHRYSLER UNIDAD 2.pptxxxxxcxSISTEMA TBI CHRYSLER UNIDAD 2.pptxxxxxcx
SISTEMA TBI CHRYSLER UNIDAD 2.pptxxxxxcx
 
GESTIÓN POR RESULTADOS EN EL SECTOR PÚBLICO.pptx
GESTIÓN POR RESULTADOS EN EL SECTOR PÚBLICO.pptxGESTIÓN POR RESULTADOS EN EL SECTOR PÚBLICO.pptx
GESTIÓN POR RESULTADOS EN EL SECTOR PÚBLICO.pptx
 
NX-400-FALCON-COSTARICA-Manual-Usuario.pdf
NX-400-FALCON-COSTARICA-Manual-Usuario.pdfNX-400-FALCON-COSTARICA-Manual-Usuario.pdf
NX-400-FALCON-COSTARICA-Manual-Usuario.pdf
 
Dibujo técnico - Teoria de Tolerancias y Ajustes.pdf
Dibujo técnico - Teoria de Tolerancias y Ajustes.pdfDibujo técnico - Teoria de Tolerancias y Ajustes.pdf
Dibujo técnico - Teoria de Tolerancias y Ajustes.pdf
 
3.BATERIA y sus princiaples componentes internos que llleva para su correcto uso
3.BATERIA y sus princiaples componentes internos que llleva para su correcto uso3.BATERIA y sus princiaples componentes internos que llleva para su correcto uso
3.BATERIA y sus princiaples componentes internos que llleva para su correcto uso
 
https://es.slideshare.net/karolpr/normasdeauditoriagubernamentalpptx
https://es.slideshare.net/karolpr/normasdeauditoriagubernamentalpptxhttps://es.slideshare.net/karolpr/normasdeauditoriagubernamentalpptx
https://es.slideshare.net/karolpr/normasdeauditoriagubernamentalpptx
 
Citroen C5 Aircross manual de utilizacion.pdf
Citroen C5 Aircross manual de utilizacion.pdfCitroen C5 Aircross manual de utilizacion.pdf
Citroen C5 Aircross manual de utilizacion.pdf
 
Refrigeración Automotriz(aire acondicionado)..pptx
Refrigeración Automotriz(aire acondicionado)..pptxRefrigeración Automotriz(aire acondicionado)..pptx
Refrigeración Automotriz(aire acondicionado)..pptx
 
capacitacion-para-limpieza-en-laboratorios-1.ppt
capacitacion-para-limpieza-en-laboratorios-1.pptcapacitacion-para-limpieza-en-laboratorios-1.ppt
capacitacion-para-limpieza-en-laboratorios-1.ppt
 
RESOLUCIÓN RAZ LÓGICO 07_PLANTEAMIENTO PROBLEMAS_1613418128.pdf
RESOLUCIÓN RAZ LÓGICO 07_PLANTEAMIENTO PROBLEMAS_1613418128.pdfRESOLUCIÓN RAZ LÓGICO 07_PLANTEAMIENTO PROBLEMAS_1613418128.pdf
RESOLUCIÓN RAZ LÓGICO 07_PLANTEAMIENTO PROBLEMAS_1613418128.pdf
 
SESION DE APRENDIZAJE LOS SENTIDOS Y SUS CUIDADOS
SESION DE APRENDIZAJE LOS SENTIDOS Y SUS CUIDADOSSESION DE APRENDIZAJE LOS SENTIDOS Y SUS CUIDADOS
SESION DE APRENDIZAJE LOS SENTIDOS Y SUS CUIDADOS
 
VALORIZACION DE MINERALES.pptx VALORIZACION DE MINERALES.pptx
VALORIZACION DE MINERALES.pptx VALORIZACION DE MINERALES.pptxVALORIZACION DE MINERALES.pptx VALORIZACION DE MINERALES.pptx
VALORIZACION DE MINERALES.pptx VALORIZACION DE MINERALES.pptx
 
Sistema electrico camion VW worker. 15.190pdf
Sistema electrico camion VW worker. 15.190pdfSistema electrico camion VW worker. 15.190pdf
Sistema electrico camion VW worker. 15.190pdf
 

Dce2 ejercicios asp.net

  • 1. ________________________________________________ Programa Desarrollador Cinco Estrellas 2005 Estrella 2 ________________________________________________ Guia de Ejericicios – Aplicaciones Web Forms con ASP.NET Página 1 de 52
  • 2. Índice Requisitos ............................................................................................................................ 3 Introducción.......................................................................................................................... 4 ASP .NET 2.0 – Paso a Paso............................................................................................... 5 Grid View.............................................................................................................................. 5 DetailsView ........................................................................................................................ 16 FormView ........................................................................................................................... 24 DataList .............................................................................................................................. 27 Enlazando Datos con Objetos............................................................................................ 30 Enlazando con la capa de acceso a Datos..................................................................... 30 Enlazando a una Clase de Negocios.............................................................................. 39 TREEVIEW + DataAdapter ................................................................................................ 49 Página 2 de 52
  • 3. Requisitos • Haber cursado y aprobado el examen correspondiente al módulo de la Estrella 1 del programa Desarrollador 5 Estrellas. • Haber leído y comprendido el material teórico correspondiente al módulo de la Estrella 2 del programa. • Para la resolucion de los ejercicios debe tener instalado: o MS Visual Studio 2005 / Visual Web Developer 2005 Express Edition. o MS SQL Server 2005 Express Edition. Debe instalar además las siguientes bases de datos: - Northwind (http://www.microsoft.com/downloads/details.aspx?FamilyId=06616212- 0356-46A0-8DA2-EEBC53A68034&displaylang=en ) - AdventureWorks (http://www.microsoft.com/downloads/details.aspx?familyid=9697AAAA-AD4B-416E- 87A4-A8B154F92787&displaylang=en ) Para instalar correctamente la base AdventureWorks se recomienda la lectura del documento titulado “SQL Server 2005 Databases and Samples Overview”, que acompaña a esta guia. También puede ser descargado de http://download.microsoft.com/download/d/8/6/d865cf0c-c44b-401b-b426- b3bf5c628112/SQLServerDatabasesAndSamplesOverview.htm Página 3 de 52
  • 4. Introducción En el presente documento se desarrollan distintos ejercicios “Paso a Paso” que sirven de complemento al curso Estrella 2 – ASP.NET, del programa Desarrollador 5 Estrellas. Los ejercicios aquí desarrollados muestran paso a paso como realizar aplicaciones web simples con acceso a datos, y pueden realizarse en C# y/o VB.NET (hay porciones de código transcriptas, e imágenes que lo guiarán para lograr los objetivos). Se han resuelto algunos de los ejercicios para que el alumno pueda tener el ejemplo del codigo terminado. Los ejercicios resueltos de esta guia paso a paso son: • GridView • DetailsView • Enlazando con la capa de negocios Todos ellos se encuentran en el proyecto “DCE2005 Acceso a Datos”, adjunto al material del curso. También se encuentran adjuntas al material otros dos proyectos, uno que ejemplifica la utilización de los nuevos controles de login incorporados en ASP.NET 2.0, y otro que muestra la utilización de páginas maestras y los nuevos controles de navegación y menú. En el ejercicio de Acceso a Datos se incluyen también el nuevo concepto de Themes & Skins, para dar a la aplicación un aspecto agradable (este nuevo tema esta desarrollado en la presentación teórica). Página 4 de 52
  • 5. ASP .NET 2.0 – Paso a Paso Grid View Objetivo: Construir un formulario con un control GridView para visualizar, modificar y eliminar datos de la tabla “Products” de la base de datos Northwind. NOTA: La serie de pasos utilizada en la resolución del presente ejercicio no necesariamente refleja las mejores prácticas de Desarrollo y Arquitectura de aplicaciones empresariales establecidas por Microsoft. 1. Abra el Visual Web Developer 2005 Express Edition. Seleccione el menú File / New Web Site para crear un nuevo Web Site, según la siguiente figura. Note que el lenguaje es el Visual Basic, pero si usted desea cambiarlo a Visual C# no hay ningún problema, ya que los pasos son los mismos. 2. Luego presione el botón OK. Se abrirá una ventana conteniendo la página Default.aspx con el HTML que se mostrará. A los efectos del ejercicio, vamos a crear páginas relativas al tópico abordado, por lo tanto, abra el Solution Explorer (Ctrl + Alt + L) y excluya esta página. Para agregar una nueva página al Solution Explorer, haga click con el botón derecho sobre C:WebSiteDCE20005 y seleccione Add New Item. Escriba GridView.aspx en el nombre de la página y haga click en Add. Página 5 de 52
  • 6. 3. En caso de que quiera escribir los Tags HTML directamente en esta ventana, siéntase a gusto, sin embargo, le mostraré los controles en la ventana de Design. Siendo así, haga click en el botón Design en el pie de la página. Página 6 de 52
  • 7. 4. Abra la Toolbox y arrastre un control GridView hacia el formulario. Se abrirá una Smart Tag conteniendo diversas opciones. Página 7 de 52
  • 8. 5. Seleccione Auto Format y aplique un formato de acuerdo con su gusto. 6. Para definir la fuente de datos, en Choose Data Source seleccione New Data Source. 7. Usted puede seleccionar cualquier fuente de datos, pero en este caso elija Database. Note que ya se define un ID (SqlDataSource1), y en caso de que quiera alterarlo bastará con escribirlo. Como vamos a utilizar esta conexión en varios ejercicios, deje el checkbox de conexión seleccionado para que la string de conexión sea almacenada en el archivo Web.Config. Página 8 de 52
  • 9. 8. Se abrirá un “wizard” por el cual se configura la base de datos y se arma la cadena de conexión, le dejamos ese paso para que lo configure de acuerdo a sus necesidades. 9. Una vez configurada la cadena de conexión necesita identificar cuál es la tabla que será usada como fuente de datos. Seleccione Productos y algunos campos. Página 9 de 52
  • 10. 10. Como permitiremos la edición de datos en el GridView, haga click en el botón Advanced para abrir esta ventana, donde seleccionará las dos opciones para incluir en el control SqlDataSource todas las instrucciones SQL que hacen efectivas estas operaciones. Página 10 de 52
  • 11. 11. En la Smart Tag se muestran los checkboxes para que active las operaciones. Seleccione: • Enable Paging, para permitir la paginación. • Enable Sorting, para permitir el ordenado por columna. • Enable Editing, para permitir la edición de datos directamente en el GridView. • Enable Deleting, para permitir la exclusión de datos. 12. Si desea editar las columnas, seleccione Edit Columns. Primero deberá “des seleccionar” el tilde campo “Auto generate Columns”, y luego añadir las columnas que desee: Página 11 de 52
  • 12. 13. Puede aplicar el formato que desee en los campos, por ejemplo configure el formato en el campo “ProductNumber para que sea exhibido como numérico, sin decimales (DataFormatString = {0:n0}). Se puede aplicar cualquier formato a las columnas. Página 12 de 52
  • 13. 14. Como fue permitida la edición de datos en el control, personalice los botones al idioma en el que el control será utilizado. Para ello, seleccione el Command Field, localice las propiedades Text de cada botón y modifique el texto. Página 13 de 52
  • 14. 15. Seleccione Auto Format en el Smart Tag, y aplique un formato de acuerdo con su agrado. (en el ejemplo adjunto en el material se utiliza un Theme para la definición del estilo) 16. Guarde el proyecto y presione CTRL + F5 para ejecutarlo en el navegador. Es importante destacar que el ASP.NET 2.0 no necesita tener un IIS instalado en la máquina, ya que trabaja con su propio servidor web de desarrollo. Página 14 de 52
  • 15. El código de este ejercicio se encuentra en el ejemplo adjunto “DCE2005 Acceso a Datos”, en la página “GridView.aspx”, tenga en cuenta que en el ejercicio resuelto se utiliza una “Máster Page y Themes” para dar un formato y estilo amigable. Página 15 de 52
  • 16. DetailsView Objetivo: Construir un formulario con el control DetailsView para visualizar y modificar los registros de la tabla “Employes” de la base de datos AdventureWorks. NOTA: La serie de pasos utilizada en la resolución del presente ejercicio no necesariamente refleja las mejores prácticas de Desarrollo y Arquitectura de aplicaciones empresariales establecidas por Microsoft. 1. Agregue un nuevo Web Form al Solution Explorer, llámelo DetailsView.aspx. 2. Abra la Toolbox y arrastre un control DetailsView hacia el formulario. Se abrirá una ventana con la Smart Tag para informar la fuente de datos. Seleccione New data source: 3. Informe cuál es la fuente de datos, en este caso es una Database. Página 16 de 52
  • 17. 4. Seleccione la tabla Employees con algunos campos. Página 17 de 52
  • 18. 5. Haga click en el botón Advanced Options y seleccione los dos checkboxes para que sean creados los métodos para soportar la inserción y edición de datos. Página 18 de 52
  • 19. 6. Volviendo al Smart Tag, seleccione todos los checkboxes para activar la paginación y el mantenimiento de datos. 7. .Ingrese a la opción “EditFields…” y des seleccione la opción “Auto generate columns”. Del mismo modo que hizo con la grilla, añada los campos que desee por medio de la opción “Add New Field…” 8. Personalice el campo “Fecha Finalización” para que quede con el formato de acuerdo con la propiedad DataFormatString, que es {0:dd/MM/yyyy}. El “0:” indica que será el campo actual y el formato viene a continuación. Página 19 de 52
  • 20. 9. Si analiza el código HTML generado, notará que el contenido de la fuente de datos está declarado dentro del HTML a través de la Tag asp:SqlDataSource. Página 20 de 52
  • 21. <form id="form1" runat="server"> <asp:DetailsView ID="DetailsView1" runat="server" AllowPaging="True" AutoGenerateRows="False" BackColor="#DEBA84" BorderColor="#DEBA84" BorderStyle="None" BorderWidth="1px" CellPadding="3" CellSpacing="2" DataSourceID="SqlDataSource1" Height="50px" Width="125px"> <FooterStyle BackColor="#F7DFB5" ForeColor="#8C4510" /> <EditRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="White" /> <RowStyle BackColor="#FFF7E7" ForeColor="#8C4510" /> <PagerStyle ForeColor="#8C4510" HorizontalAlign="Center" /> <Fields> <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" ShowInsertButton="True" /> <asp:BoundField DataField="ProductId" HeaderText="Codigo" SortExpression="ProductId" /> <asp:BoundField DataField="Name" HeaderText="Nombre" SortExpression="Name" /> <asp:BoundField DataField="ProductNumber" HeaderText="Producto" SortExpression="ProductNumber" /> <asp:BoundField DataField="DaysToManufacture" HeaderText="Demora en Dias" SortExpression="DaysToManufacture" /> <asp:BoundField DataField="ListPrice" HeaderText="Precio" SortExpression="ListPrice" /> <asp:BoundField DataField="DiscontinuedDate" DataFormatString="{0:dd/MM/yyyy}" HeaderText="Fecha Finalizacion" SortExpression="DiscontinuedDate" /> </Fields> <HeaderStyle BackColor="#A55129" Font-Bold="True" ForeColor="White" /> </asp:DetailsView> <asp:SqlDataSource ID="sqlDataSource" runat="server" ConnectionString="<%$ ConnectionStrings:ADVENTUREWORKSConnectionString %>" ConflictDetection="CompareAllValues" SelectCommand="SELECT [ProductID], [Name], [ProductNumber], [Color], [DaysToManufacture], [ListPrice], [DiscontinuedDate] FROM [Production].[Product]" DeleteCommand="DELETE FROM [Production].[Product] WHERE [ProductID] = @original_ProductID AND [Name] = @original_Name AND [ProductNumber] = @original_ProductNumber AND [Color] = @original_Color AND [DaysToManufacture] = @original_DaysToManufacture AND [ListPrice] = @original_ListPrice AND [DiscontinuedDate] = @original_DiscontinuedDate" InsertCommand="INSERT INTO [Production].[Product] ([Name], [ProductNumber], [Color], [DaysToManufacture], [ListPrice], [DiscontinuedDate]) VALUES (@Name, @ProductNumber, @Color, @DaysToManufacture, @ListPrice, @DiscontinuedDate)" OldValuesParameterFormatString="original_{0}" UpdateCommand="UPDATE [Production].[Product] SET [Name] = @Name, [ProductNumber] = @ProductNumber, [Color] = @Color, [DaysToManufacture] = @DaysToManufacture, [ListPrice] = @ListPrice, [DiscontinuedDate] = @DiscontinuedDate WHERE [ProductID] = @original_ProductID AND [Name] = @original_Name AND [ProductNumber] = @original_ProductNumber AND [Color] = @original_Color AND [DaysToManufacture] = @original_DaysToManufacture AND [ListPrice] = @original_ListPrice AND [DiscontinuedDate] = @original_DiscontinuedDate"> <DeleteParameters> <asp:Parameter Name="original_EmployeeID"></asp:Parameter> Página 21 de 52
  • 22. ... <asp:Parameter Name="original_Photo"></asp:Parameter> </DeleteParameters> <UpdateParameters> <asp:Parameter Type="String" Name="LastName"></asp:Parameter> ... <asp:Parameter Name="original_Photo"></asp:Parameter> </UpdateParameters> <InsertParameters> <asp:Parameter Type="String" Name="LastName"></asp:Parameter> ... <asp:Parameter Name="Photo"></asp:Parameter> </InsertParameters> </asp:SqlDataSource> </form> 10. Guarde el proyecto y ejecútelo en el navegador. Incluya un nuevo registro y guárdelo. Enseguida, modifique el contenido y guarde nuevamente. Página 22 de 52
  • 23. El código de este ejercicio se encuentra en el ejemplo adjunto “DCE2005 Acceso a Datos”, en la página “DetailsView.aspx”. Tenga en cuenta que en el ejercicio resuelto se utiliza una “Master Page” y Themes para dar un formato y estilo amigable. Página 23 de 52
  • 24. FormView Objetivo: Construir un formulario con el control FormView para visualizar los registros de la tabla “Customers” de la base de datos NorthWind. NOTA: La serie de pasos utilizada en la resolución del presente ejercicio no necesariamente refleja las mejores prácticas de Desarrollo y Arquitectura de aplicaciones empresariales establecidas por Microsoft. 1. Agregue un nuevo Web Form en el Solution Explorer. Arrastre el control FormView hacia el formulario. 2. La fuente de datos será un Database. Seleccione la tabla Customers de la base de datos Northwind y todos los campos. Página 24 de 52
  • 25. 3. Aplique un Auto Format según la opción. 4. Ajuste el layout de manera que quepan todos los datos. Página 25 de 52
  • 26. 5. Guarde el proyecto y ejecútelo en el navegador. Navegue en las páginas para visualizar los registros. Página 26 de 52
  • 27. DataList Objetivo: Construir un formulario con el control DataList. Este control muestra diversos registros en la misma página en la que usted debe determinar el área de datos y el respectivo layout. NOTA: La serie de pasos utilizada en la resolución del presente ejercicio no necesariamente refleja las mejores prácticas de Desarrollo y Arquitectura de aplicaciones empresariales establecidas por Microsoft. 1. Agregue un nuevo Web Form al Solution Explorer. Arrastre el control DataList hacia el formulario. Como en los ejercicios anteriores seleccione el DataSource, en este caso seleccione la tabla Orders. 2. Configure con AutoFormat para que el control tenga un aspecto de su agrado. 3. Personalice el campo OrderDate para que la fecha sea mostrada en el formato adecuado. Para ello, seleccione el OrderDateLabel y el enlace Edit DataBindings. Configure el formato para Short Date. Página 27 de 52
  • 28. 4. Note que en el HTML, la propiedad clave para exhibir los datos es la Text donde usa el Eval(field). <asp:DataList ID="DataList1" Runat="server“ DataSourceID="SqlDataSource1" RepeatColumns="3"> <ItemTemplate> <b>OrderID: </b> <asp:Label ID="OrderIDLabel" Text='<%# Eval("OrderID") %>'/> OrderDate: <asp:Label ID="OrderDateLabel" Text='<%# Eval("OrderDate", "{0:d}") ... ShipCountry: <asp:Label ID="ShipCountryLabel" Text='<%# Eval("ShipCountry")%>'/> </ItemTemplate> </asp:DataList> <asp:SqlDataSource ID="SqlDataSource1" Runat="server“ SelectCommand="SELECT [OrderID], [OrderDate], [ShipName], [ShipAddress], [ShipCity], [ShipCountry] FROM [Orders]“ ConnectionString="<%$ ConnectionStrings:AppConnectionString1 %>"> </asp:SqlDataSource> Página 28 de 52
  • 29. 5. Guarde el proyecto y ejecútelo en el navegador. Página 29 de 52
  • 30. Enlazando Datos con Objetos Enlazando con la capa de acceso a Datos Objetivo: Definir una clase de de Acceso a Datos (DAL) conteniendo métodos para acceder a una base de datos que devuelvan un DataSet para enlazar los datos en los controles que sean necesarios. NOTA: La serie de pasos utilizada en la resolución del presente ejercicio no necesariamente refleja las mejores prácticas de Desarrollo y Arquitectura de aplicaciones empresariales establecidas por Microsoft. 1. En el Solution Explorer, agregue un nuevo proyecto tipo Class Library llamado DataAccess. 2. Como accederemos al SQL Server, en la primera línea de la pantalla escriba los Namespaces que contienen los métodos y propiedades para efectuar el acceso. En este caso, el namespace que contiene la clase SqlClient, la cual fue creada para manipular datos con SQL Server 7 o superior. VB.NET Imports System.Data Imports System.Data.SqlClient C# using System.Data; using System.Data.SqlClient; 3. Escriba el método llamado GetCategories que devuelve un DataSet. Este método: • utilizará el string de conexión llamado myConn que está almacenado en el archivo Web.Config; • define una instrucción SQL que selecciona todos los campos de la tabla Categories; • define la conexión y el Command que implementa el Select; • crea un DataAdapter y un DataSet; • completa el DataAdapter en el respectivo DataSet definido y lo devuelve. Mientras tanto, el método GetProducts recibe como argumento el código de la categoría y devuelve un Dataset con los productos de esa categoría. Página 30 de 52
  • 31. Este código será usado como criterio en la instrucción SQL para investigar todos los productos de la respectiva categoría: VB.NET Public Class DataAccess Public Shared Function GetCategories() As DataSet Dim conexion As String = ConfigurationSettings.ConnectionStrings(“myConn").ConnectionString() Dim sql As String = "SELECT * FROM Categories" Dim conn As New SqlConnection(conexion) Dim command As New SqlCommand(sql, conn) Dim adapter As New SqlDataAdapter(command) Dim ds As New DataSet adapter.Fill(ds) Return ds End Function Public Shared Function GetProducts(ByVal cat As Integer) As DataSet Dim conexion As String = ConfigurationSettings.ConnectionStrings(“myConn").ConnectionString() Dim conn As New SqlConnection(conexion) Dim command As New SqlCommand() command.Connection = conn command.CommandType = CommandType.Text command.Parameters.Add(New SqlParameter("@cat", cat)) command.CommandText = "SELECT ProductID, ProductName, UnitPrice, UnitsInStock FROM Products WHERE categoryID=@cat" Dim adapter As New SqlDataAdapter(command) Dim ds As New DataSet adapter.Fill(ds) Página 31 de 52
  • 32. Return ds End Function End Class C# public class DataAccess { public static DataSet GetCategories() { string conexion = "Database=northwind;server=(local);user id=sa "; string sql = "SELECT * FROM Categories"; SqlConnection conn = new SqlConnection(conexion); SqlCommand command = new SqlCommand(sql, conn); SqlDataAdapter adapter = new SqlDataAdapter(command); DataSet ds = new DataSet(); adapter.Fill(ds); return ds; } public static DataSet GetProducts(int cat) { string conexion = "Database=northwind;server=(local);user id=sa"; SqlConnection conn = new SqlConnection(conexion); SqlCommand command = new SqlCommand(); command.Connection = conn; command.CommandType = CommandType.Text; command.Parameters.Add(new SqlParameter("@cat", cat)); command.CommandText = "SELECT ProductID, ProductName, UnitPrice, UnitsInStock FROM Products WHERE categoryID=@cat"; Página 32 de 52
  • 33. SqlDataAdapter adapter = new SqlDataAdapter(command); DataSet ds = new DataSet(); adapter.Fill(ds); return ds; } } 4. Guarde el proyecto. Agregue un nuevo Web Form en el Solution Explorer. Escriba Categorías y arrastre el control DropDownList hacia el formulario. En la Smart Tag, seleccione el checkbox AutoPostBack para enviar el contenido de este control al servidor. 5. Para la fuente de datos seleccione Object, ya que usaremos la clase definida anteriormente. En caso de que desee alterar el nombre del DataSource, siéntase libre de hacerlo. Página 33 de 52
  • 34. 6. En el Tab Select se muestran todos los métodos existentes. Seleccione el GetCategories y observe que el tipo de retorno es un DataSet. Página 34 de 52
  • 35. 7. Como el control es un DropDownList, escriba CategoryName en “Data Field to Display”, porque es aquí que el campo será exhibido. Por otra parta, el ”Data Field for the Value” es el campo que será almacenado cuando el usuario seleccione un ítem, por lo tanto escriba CategoryID. 8. A continuación Construiremos en el formulario un GridView para mostrar todos los productos de la respectiva categoría. Seleccione como Data Source el Object DataAccess y el método GetProducts. Página 35 de 52
  • 36. 9. Como este método requiere un parámetro, hay que especificar que vendrá del control DropDownList1, para esto seleccione en el combo ParameterSource la opción “Control”, y seleccione en el combo “ControlId”, el control que corresponda. Página 36 de 52
  • 37. 10. En la Smart Tag, habilite la paginación y el ordenamiento, y configure el formato para la grilla que sea de su agrado. Página 37 de 52
  • 38. 11. Guarde el proyecto y ejecútelo en el navegador. Seleccione otras categorías y vea que el GridView muestra todos los productos de la categoría seleccionada. Página 38 de 52
  • 39. Enlazando a una Clase de Negocios Objetivo: Obtener los departamentos de la base de datos AdventureWorks según el grupo solicitado por el cliente (se utilizará la tabla “Department”). Definir un componente de negocios que implemente “reglas” a los datos obtenidos del componente de acceso a datos. Implementar el componente dentro de la carpeta virtual “App_Code”. NOTA: La serie de pasos utilizada en la resolución del presente ejercicio no necesariamente refleja las mejores prácticas de Desarrollo y Arquitectura de aplicaciones empresariales establecidas por Microsoft. 1. En el Solution Explorer, con el botón derecho del Mouse sobre el proyecto agregue la carpeta virtual “App_Code”: Página 39 de 52
  • 40. 2. Dentro de la carpeta generada, incorpore tres clases: “AccesoDatos.cs”, “CapaDeNegocio.cs” y “Departamento.cs”. Veamos primero la clase de acceso a datos: //Se incluyen las referencias necesarias, además de las de acceso a //datos y Sql, los namespaces “using System.Collections.Generic” y //“using System.Text” serán utilizados para poder utilizar una lista //generica para la devolucion de datos y un contructor de cadenas para //crear la cadena de consultas. VB.NET Imports System.Data Imports System.Data.SqlClient Imports System.Collections.Generic Imports System.Text C# using System.Data; using System.Collections.Generic; using System.Text; using System.Data.SqlClient; 3. En esta clase que simula el componente de acceso a datos, hay que incorporar un método que devuelva los Departamentos por grupos, de acuerdo al requisito. La clase completa se encuentra en el proyecto “DCE2005 Acceso a Datos”, que también posee un método para devolver los grupos en que se dividen los departamentos. VB.NET Public Function ObtenerDepartamentos(ByVal grupo As String) As List(Of Departamento) Dim departamentos As List(Of Departamento) = New List(Of Departamento) Dim query As StringBuilder = New StringBuilder query.Append("SELECT ") query.Append("DepartmentID, ") query.Append("Name, ") query.Append("ModifiedDate ") query.Append("FROM [HumanResources].[Department] ") query.AppendFormat("WHERE GroupName = '{0}' ", grupo) query.Append("Order By Name") Dim command As SqlCommand = New SqlCommand command.CommandText = query.ToString Página 40 de 52
  • 41. Dim conn As SqlConnection = New SqlConnection(ConfigurationManager.ConnectionStrings("ADVENTUREWORKSConnectionSt ring").ConnectionString) command.Connection = conn Try conn.Open() ' Using Dim dr As SqlDataReader = command.ExecuteReader Try If dr.HasRows Then While dr.Read Dim dep As Departamento = New Departamento(Convert.ToInt32(dr(0)), dr(1).ToString, grupo, Convert.ToDateTime(dr(2))) departamentos.Add(dep) End While End If Finally CType(dr, IDisposable).Dispose() End Try Catch ex As Exception Throw ex Finally conn.Close() End Try Return departamentos End Function Página 41 de 52
  • 42. C# /// <summary> /// Este metodo obtiene los departamentos por grupos. /// </summary> /// <param name="grupo">El grupo seleccionado del combo</param> /// <returns>Una lista de departamentos.</returns> public List<Departamento> ObtenerDepartamentos(string grupo) { List<Departamento> departamentos = new List<Departamento>(); StringBuilder query = new StringBuilder(); query.Append("SELECT "); query.Append("DepartmentID, "); query.Append("Name, "); query.Append("ModifiedDate "); query.Append("FROM [HumanResources].[Department] "); query.AppendFormat("WHERE GroupName = '{0}' ", grupo); query.Append("Order By Name"); SqlCommand command = new SqlCommand(); command.CommandText = query.ToString(); SqlConnection conn = new SqlConnection( ConfigurationManager.ConnectionStrings[ "ADVENTUREWORKSConnectionString" ].ConnectionString); command.Connection = conn; try { conn.Open(); using (SqlDataReader dr = command.ExecuteReader()) { if (dr.HasRows) { while(dr.Read()) { Departamento dep = new Departamento( Convert.ToInt32( dr[0]), dr[1].ToString(), grupo , Convert.ToDateTime(dr[2]) ); departamentos.Add(dep); } } } } catch (Exception ex) { throw ex; } finally { conn.Close(); } return departamentos; } } Página 42 de 52
  • 43. 4. Otra clase necesaria, para poder desarrollar el método anterior es la clase “Departamento.cs”, esta clase contendrá las propiedades y métodos necesarios para crear el objeto “Departamento” con que se llenará la lista. Puede ver esta clase en el proyecto “DCE2005 Acceso a Datos”. 5. Por último, la clase “CapaDeNegocios”, simula un componente de negocios, en este caso y para simplificar el ejemplo, no se aplican reglas de validación, o propias del negocio, solo se invocan los métodos del componente de acceso a datos. Los accesos se realizan por medio de la clase “AccesoDatos.cs”, que simula una capa de datos, y utiliza la clase Departamento, ya que es con objetos de este tipo en los que se basa el ejercicio. Los métodos más importantes de la capa de negocios, contra los que se enlazaran los datos en los controles son los siguientes: VB.NET Public Function ObtenerDepartamentosPorGrupo(ByVal grupo As String) As List( of Departamento) 'Definir y agregar las reglas de negocio Dim ad As AccesoDatos = New AccesoDatos Return ad.ObtenerDepartamentos(grupo) End Function C# public List<Departamento> ObtenerDepartamentosPorGrupo(string grupo) { //Definir y agregar reglas de negocio AccesoDatos ad = new AccesoDatos(); return ad.ObtenerDepartamentos(grupo); } 6. Una vez armadas las 3 clases, agregue un nuevo Web Form en el Solution Explorer y llámelo “BindingToBusinessLayer”. Con ASP.NET 2.0 puede también arrastrar y pegar los controles en la solapa “Source”, entonces, desde la solapa “Source” incorpore un control “Label”, un control “DropDownList” y un control “GridView”. En el ejercicio resuelto, se esta trabajando con una página maestra y temas, para mantener una interfaz uniforme, además previamente a la incorporación de los controles se incorporo una tabla de html para darle la estructura a la página. En la porción de código copiada aquí, no se incluyen comentarios. Para ver la versión completa con comentarios, vea el ejercicio “DCE2005 Acceso a Datos”, la clase “BindingToBusinessLayer.aspx” Página 43 de 52
  • 44. Con la utilización del tema a nivel de aplicación, el código html queda más limpio, ya que no es necesario incluir propiedades de estilo (y comportamiento) en el html: ASP .NET <table> <tr> <td> <asp:Label ID="lblGrupo" runat="server" CssClass="Label" > Seleccione un grupo:</asp:Label> </td> <td align=left width="83%"> <asp:DropDownList ID="cmbGrupos" runat="server" CssClass="Text" DataSourceID="dsGrupos" AutoPostBack="true"> </asp:DropDownList><br /> </td> </tr> <tr height="50px"><td></td></tr> <tr> <td colspan="2" align=center> <asp:GridView ID="drDepartamentos" runat="server" DataSourceID="dsDepartamentos" AutoGenerateColumns="false"> <Columns> <asp:BoundField HeaderText="Codigo" DataField="DepartamentoID" ItemStyle-HorizontalAlign="right" /> <asp:BoundField HeaderText="Departamento" DataField="Nombre" ItemStyle-HorizontalAlign="Left" /> <asp:BoundField HeaderText="Grupo" DataField="Grupo" ItemStyle-HorizontalAlign="Left" /> <asp:BoundField HeaderText="Fecha" DataField="FechaModificacion" ItemStyle-HorizontalAlign="right" /> </Columns> </asp:GridView> </td> </tr> </table> Observe que al no permitir que la grilla “auto genere las columnas” (propiedad: AutoGenerateColumns="false"), hay que definir explícitamente cada columna a mostrar. La propiedad DataField, hace referencia al campo que devuelve la consulta a la base de datos, enlazando la información a mostrar en cada columna. 7. Las fuentes de datos utilizadas en el ejercicio, fueron incorporadas del ToolBox, y configuradas como sigue: ASP .NET Página 44 de 52
  • 45. <!--Control Datasource para llenar la grilla de departamentos. Mediante el parametro se indica la relacion entre el combo y la grilla--> <asp:ObjectDataSource ID="dsDepartamentos" runat=server TypeName="Departamentos.CapaDeNegocio" SelectMethod="ObtenerDepartamentosPorGrupo" DataObjectTypeName="Departamentos.Departamento"> <SelectParameters> <asp:ControlParameter DefaultValue="Quality Assurance" Name="grupo" Type="String" ControlID="cmbGrupos" PropertyName="SelectedValue" /> </SelectParameters> </asp:ObjectDataSource> <!-- Control Datasource para llenar el combo de grupos --> <asp:ObjectDataSource ID="dsGrupos" runat="server" TypeName="Departamentos.CapaDeNegocio" SelectMethod="ObtenerGrupos"> </asp:ObjectDataSource> 8. Puede ver el código completo en el ejercicio antes mencionado, el resultado es el siguiente: Tenga en cuenta que en la vista de diseño, mediante el smart tag puede configurar el control “ObjectDataSource” seleccionando la clase de la capa de negocios, y los métodos para realizar el enlace de datos a los controles, de manera similar al ejercicio anterior. Página 45 de 52
  • 46. TREEVIEW + XML Objetivo: Definir un archivo XML y utilizarlo como fuente de datos para un control TreeView. NOTA: La serie de pasos utilizada en la resolución del presente ejercicio no necesariamente refleja las mejores prácticas de Desarrollo y Arquitectura de aplicaciones empresariales establecidas por Microsoft. 1. En el Solution Explorer, agregue un nuevo ítem de tipo XML File llamado myXML con la siguiente estructura. <?xml version="1.0" encoding="utf-8" ?> <collection> <book> <title>asp.NET</title> <author>dino esposito</author> <publisher>ms press</publisher> </book> <book> <title>sql reporting services</title> <author>tom cruise</author> <publisher>ms press</publisher> </book> </collection> 2. Agregue un nuevo Web Form. Arrastre el control TreeView hacia el formulario y asocie como fuente de datos el archivo XML creado anteriormente. Página 46 de 52
  • 47. 3. Defina un Auto Format según la opción para presentar los datos jerárquicos de manera viable. Página 47 de 52
  • 49. TREEVIEW + DataAdapter Objetivo: Escribir un código que leerá una tabla en el banco de datos, Construir un DataAdapter y completar un control TreeView. NOTA: La serie de pasos utilizada en la resolución del presente ejercicio no necesariamente refleja las mejores prácticas de Desarrollo y Arquitectura de aplicaciones empresariales establecidas por Microsoft. 1. En el Solution Explorer, Agregue un nuevo formulario conteniendo un control TreeView. Como escribiremos el código directamente en el HTML, en el pie de página, haga click en el botón HTML y escriba el siguiente código que leerá dos tablas (Categories y Products) de la base de datos Northwind, construirá en memoria una relación entre las claves y lo usará como fuente de datos para construir el control TreeView. Como este control requiere datos jerárquicos, entonces construiremos un nivel con las categorías y otro nivel con los productos de las respectivas categorías. VB.NET <%@ Page Language="VB" %> <%@ Import Namespace="System.Data" %> <%@ Import Namespace="System.Data.SqlClient" %> <script runat="server"> Dim conexao As String = "Server=localhost;Database=Northwind;user id=sa" Sub Page_Load() If Not Page.IsPostBack Then FillNodes() End If End Sub Sub FillNodes() Dim ds As DataSet = GetData() For Each masterRow As DataRow In ds.Tables("Categories").Rows Dim masterNode As New TreeNode(masterRow("CategoryName").ToString()) Página 49 de 52
  • 50. TreeView1.Nodes.Add(masterNode) For Each childRow As DataRow In masterRow.GetChildRows("Children") Dim childNode As New TreeNode(childRow("ProductName").ToString()) masterNode.ChildNodes.Add(childNode) Next Next End Sub Function GetData() As DataSet Dim conn As SqlConnection = New SqlConnection(conexao) Dim sqlCat As String = "SELECT CategoryID, CategoryName FROM Categories" Dim sqlProd As String = "SELECT CategoryID, ProductName FROM Products" Dim daCat As SqlDataAdapter = New SqlDataAdapter(sqlCat, conn) Dim daProd As SqlDataAdapter = New SqlDataAdapter(sqlProd, conn) Dim ds As DataSet = New DataSet() daCat.Fill(ds, "Categories") daProd.Fill(ds, "Products") ds.Relations.Add("Children", _ ds.Tables("Categories").Columns("CategoryID"), _ ds.Tables("Products").Columns("CategoryID")) Return ds End Function </script> C# <%@ Page Language="C#" %> Página 50 de 52
  • 51. <%@ Import Namespace="System.Data" %> <%@ Import Namespace="System.Data.SqlClient" %> <script runat="server"> const string connString = "Server=localhost;Database=Northwind;user id=sa"; void Page_Load() { if (! Page.IsPostBack) FillNodes(); } void FillNodes() { DataSet dst = GetData(); foreach (DataRow masterRow in dst.Tables["Categories"].Rows) { TreeNode masterNode = new TreeNode((string)masterRow["CategoryName"]); TreeView1.Nodes.Add(masterNode); foreach (DataRow childRow in masterRow.GetChildRows("Children")) { TreeNode childNode = new TreeNode((string)childRow["ProductName"]); masterNode.ChildNodes.Add(childNode); } } } DataSet GetData() Página 51 de 52
  • 52. { SqlConnection conn = new SqlConnection(connString); string sqlCat = "Select CategoryID, CategoryName FROM Categories"; string sqlProd = "Select CategoryID, ProductName FROM Products"; SqlDataAdapter daCat = new SqlDataAdapter(sqlCat, conn); SqlDataAdapter daProd = new SqlDataAdapter(sqlProd, conn); DataSet ds = new DataSet(); daCat.Fill(ds, "Categories"); daProd.Fill(ds, "Products"); ds.Relations.Add("Children", ds.Tables["Categories"].Columns["CategoryID"], ds.Tables["Products"].Columns["CategoryID"]); return ds; } </script> Página 52 de 52