<%@ Page Language="C#" AutoEventWireup="true" 
CodeFile="BindingToBusinessLayer.aspx.cs" 
Inherits="BindingToBusinessLayer"
MasterPageFile="~/SingleMaster.master"  %>

 
<asp:content ID="Content1" contentplaceholderid="PageContent" runat="Server">
    <!--
        No es objeto de este ejercicio explicar "Master Pages" este concepto esta 
        explicado en el ejercicio correspondiente: "DCE2005 MasterPage Navigation"
    -->

    <div>
    <table width="100%">
        <tr>
            <td colspan="2" align="center" height="100px" class="Title">
                Enlazando controles con objetos.
            </td>
        </tr>
        <tr>
            <td colspan="2" class="Text">
                En esta página tanto el combo con los grupos, como la grilla con los departamentos
                se encuentran enlazadas con el control "ObjectDataSource" para obtener la informacion 
                del servidor de datos.
                Este control se conecta mediante un componente que se encarga de aplicar reglas del
                negocio a los datos que obtiene.
            </td>
        </tr>
            <tr height="50px"><td></td></tr>
        <tr>
            <td>
                <asp:Label ID="lblGrupo" runat="server" CssClass="Label" >Seleccione un grupo:</asp:Label>
            </td>
            <td align=left width="83%">
                 <!--
                Este combo permite seleccionar un grupo para mostrar los 
                departamentos que hay en el mismo.
                -->     
                <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>
               <!--
                Este control muestra los departamentos por grupo.
                Esta utilizando un "Theme" para el estilo y comportamiento de la grilla.
                Para ver el tema, en el solution explorer hay una carpeta virtual "App_Themes"
                que contiene un tema "DCETheme" creado para el ejercicio, el cual contiene un 
                archivo skin y una hoja de estilo en cascada.
                El tema esta configurado en el archivo "web.config":  <pages theme="DCETheme"></pages>
                De este modo el tema afecta a toda la aplicación.
                -->
                <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>   
       
        <br />
       
        <!-- 
            Control Datasource para llenar la grilla.
            Este control hace referencia al componente generado en la carpeta de ASP.Net "APP_Code", 
            donde se encuentra el objeto "Departamento" referenciado en la propiedad DataObjectTypeName.
            En la propiedad TypeName se hace referencia a la clase que contiene las reglas del negocio,
            en este ejemplo, solo llama a la base de datos para traer los departamentos por grupos 
            (no se estan aplicando reglas especificas sobre los departamentos, una regla podria ser,
            validar que la fecha este dentro de un rango determinado).
            Lo que devuelve el metodo "ObtenerDepartamentosPorGrupo" es una lista "Generica" de Departamentos 
            (Generics es un nuevo concepto de .Net Framework 2.0, tratado en la estrella 1).
            Esto es una lista de instancias de la clase Departamento.            
            
            Se pueden incorporar metodos para modificar, agregar y borrar elementos de la base de datos,
            simplemente agregando las propiedades UpdateMethod, InsertMethod, DeleteMethod.
            Con el control "ControlParameter" se hace la vinculacion entre la fuente de datos del 
            combo y la grilla, logrando que cuando se modifique el dato en el combo la grilla
            refresque sus datos.
         -->
        <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>
    </div>
</asp:content>