jueves, 16 de septiembre de 2010

Controles enlazados a datos ASP.NET (I)

Repeater

Un repeater es un control enlazado a datos cuyo propósito principal es “sólo” mostrar información al usuario en forma de registros, esto es que pretende “repetir” una estructura determinada para n registros (aunque no hay problema en utilizarlo para orígenes de datos de 1 sólo registro). No permite la paginación ni ningún tipo de edición.

One-way data binding significa que solo permite expresiones de enlace a datos con Eval, Bind no está permitido y entonces no podemos utilizar este control para recuperar los cambios que haya realizado el usuario.

  • No permite la paginación de forma predeterminada.
  • No ofrece ninguna salida HTML predeterminada.
  • Al elegir un origen de datos desde su SmartTag no se genera ninguna plantilla predeterminada.
  • No incluye ningún enlace en su SmartTag.
  • No tiene ninguna plantilla de estilo.
  • Las plantillas disponibles son:
    • AlternatingItemTemplate
    • FooterTemplate
    • HeaderTemplate
    • ItemTemplate
    • SeparatorTemplate


DataList

Un DataList es un control enlazado a datos que permite visualizar todos los registros de una vez.
Permite la edición y selección, pero no la paginación e inserción.

Es un control de tipo Two-day data binding, luego se permite el uso de Bind.

Los eventos CRUD disponibles pueden ser personalizados en los eventos del control.

No permite la paginación de forma predeterminada.

Por defecto genera una salida predeterminada en HTML que se controla a través de la propiedad RepeatLayout:

Table (por defecto), <table>.

Flow, <span>.

Además si RepeatLayout = “Table”, entonces también se puede controla la orientación de la tabla y el número de columnas que se repiten con las propiedades RepeatDirection y RepeatColumns.

Al elegir un origen de datos desde su SmartTag se genera automáticamente la plantilla ItemTemplate con la siguiente estructura:

     FieldName:

     <asp:Label ID="FieldNameLabel" runat="server" Text='<%# Eval("FieldName") %>' />

     <br />

Los enlaces de su SmartTag  son los siguientes:

clip_image002

Incluye plantillas de estilo y además en el SmartTag  incorpora un generador de propiedades que nos ayuda a configurar la apariencia del control:

clip_image004

Las plantillas disponibles son:

  • AlternatingItemStyle
  • EditItemStyle
  • FooterStyle
  • HeaderStyle
  • ItemStyle
  • SelectedItemStyle
  • SeparatorStyle
  • AlternatingItemTemplate
  • EditItemTemplate
  • FooterTemplate
  • HeaderTemplate
  • ItemTemplate
  • SelectedItemTemplate
  • SeparatorTemplate

La propiedad DataKeyField indica el valor de que campo (sólo uno) será almacenado en la colección DataKeys, que luego nos permitirá recuperar este valor por un índice de fila, por ejemplo:

' CodigoBanco de la fila 1

Dim codigoBanco As String = DataList1.DataKeys(1)

En este control se permiten 2 acciones principales:

  • Edición/Actualización
    • Selección
  • Los valores válidos para el atributo CommandName son:
    • update
    • cancel
    • edit
    •  delete
    •  select

Para entrar un elemento en edición:

        <ItemTemplate>

<!--Resto Plantilla-->

            <asp:Button ID="btnEditar" runat="server" Text="Editar" CommandName="edit" />

        </ItemTemplate>

 

    Protected Sub DataList1_EditCommand( _

            ByVal source As Object, _

            ByVal e As System.Web.UI.WebControls.DataListCommandEventArgs) _

        Handles DataList1.EditCommand

 

        CType(source, DataList).EditItemIndex = e.Item.ItemIndex

        CType(source, DataList).DataBind()

    End Sub

Para cancelar una edición:

<EditItemTemplate>

            <!--Resto plantilla-->

            <asp:Button ID="btnCancelar" runat="server" Text="Cancelar" CommandName="cancel" />        </EditItemTemplate>

 

    Protected Sub DataList1_CancelCommand( _

        ByVal source As Object, _

        ByVal e As System.Web.UI.WebControls.DataListCommandEventArgs) _

    Handles DataList1.CancelCommand

 

        DataList1.EditItemIndex = -1

        DataList1.DataBind()

    End Sub

Para confirmar una edición:

<EditItemTemplate>

            <!--Resto plantilla-->

        <asp:Button ID="btnActualizar" runat="server" Text="Actualizar" CommandName="update" />        </EditItemTemplate>

 

    Protected Sub DataList1_UpdateCommand( _

        ByVal source As Object, _

        ByVal e As System.Web.UI.WebControls.DataListCommandEventArgs) _

    Handles DataList1.UpdateCommand

 

        Dim codigoBanco As String = DataList1.DataKeys(e.Item.ItemIndex).ToString

        Dim banco As String = CType(e.Item.FindControl("txtBanco"), TextBox).Text

        ' ejecutar sql

        DataList1.EditItemIndex = -1

        DataList1.DataBind()

    End Sub

Para eliminar un elemento:

      <asp:Button ID="btnEliminar" runat="server" Text="Eliminar" CommandName="delete" />

 

    Protected Sub DataList1_DeleteCommand( _

        ByVal source As Object, _

        ByVal e As System.Web.UI.WebControls.DataListCommandEventArgs) _

    Handles DataList1.DeleteCommand

 

        Dim codigoBanco As String = DataList1.DataKeys(e.Item.ItemIndex).ToString

        ' ejecutar sql

        DataList1.DataBind()

    End Sub

Para seleccionar un elemento:

      <asp:Button ID="btnSeleccionar" runat="server" Text="Eliminar" CommandName="select" />

 

    Protected Sub DataList1_SelectedIndexChanged( _

        ByVal sender As Object, _

        ByVal e As System.EventArgs) _

    Handles DataList1.SelectedIndexChanged

 

        DataList1.DataBind()

    End Sub

Todos estos comandos preestablecidos pasarán antes por el evento ItemCommand y además este evento también nos sirve para simular comandos que no existen y queramos controlar, por ejemplo “unselect”:

    Protected Sub DataList1_ItemCommand( _

        ByVal source As Object, _

        ByVal e As System.Web.UI.WebControls.DataListCommandEventArgs) _

    Handles DataList1.ItemCommand

 

        If e.CommandName = "unselect" Then

            DataList1.SelectedIndex = -1

        End If

        DataList1.DataBind()

    End Sub

 

DetailsView

Un control DetailsView muestra un solo registro cada vez. Normalmente se utilizar en escenarios maestro/detalle en conjunción con el control GridView. También se puede utilizar por si sólo como un mantenimiento de datos ya que permite la paginación, inserción, eliminación y actualización.

Aunque DetailsView utiliza el mecanismo de plantillas, sólo lo hace para ciertas secciones del control no relativas a datos del registro activo (Header, Footer, Pager y EmptyData). De este modo, para mostrar información del registro actual funciona a través de campos agregados a su colección Fields. Los tipos de campos admitidos son:

  • BoundField
  • ButtonField
  • CheckBoxField
  • CommandField
  • HyperLinkField
  • ImageField
  •  TemplateField
    • ItemTemplate
    • AlternativeItemTemplate
    • EditItemTemplate
    • InsertItemTemplate
    • HeaderTemplate

clip_image006

Es un control de tipo Two-way data binding.

Permite CRUD completo.

Los eventos CRUD disponibles son realizados automáticamente por el control de origen de datos que utiliza DetailsView, no se permite incluir código propio para insertar, actualizar o eliminar un registro.

Permite paginación.

Por defecto genera una salida predeterminada en una tabla.

Al elegir un origen de datos desde su SmartTag no se genera ninguna plantilla predeterminada, aunque en tiempo de ejecución sí genera un fila con todos los datos del registro al que está enlazado.

Los enlaces de su SmartTag son los siguientes:

clip_image008

En el caso de que el control de origen de datos tenga configurado métodos para la inserción, actualización o eliminación, aparecerá este otro SmartTag:

clip_image010

Incluye plantillas de estilo.

Las plantillas disponibles son:

  • AlternatingRowStyle
  • CommandRowStyle
  • EditRowStyle
  • EmptyDataRowStyle
  • FieldHeaderStyle
  • FooterStyle
  • HeaderStyle
  • InsertRowStyle
  • PagerStyle
  • RowStyle
  • EmptyDataTemplate
  • FooterTemplate
  • HeaderTemplate
  • PagerTemplate

La propiedad DataKeyNames indica los valores de que campos (uno o varios) serán almacenados como campos clave de un registro.

FormView

Un control FormView sirve al mismo propósito y es válido en los mismos escenarios que un control DetailsView. La principal diferencia entre ambos es que FormView no ofrece ninguna salida predeterminada HTML y sólo trabaja con plantillas.

Permite CRUD completo.

Los eventos CRUD disponibles son realizados automáticamente por el control de origen de datos que utiliza FormView.

Permite paginación.

Por defecto genera una salida predeterminada en una tabla.

Al elegir un origen de datos desde su SmartTag se genera automáticamente la siguiente plantilla de código:

<EditItemTemplate>

            FieldName:

            <asp:Label ID="FieldNameLabel1" runat="server"

                Text='<%# Eval("FieldName") %>' />

            <br />

            <asp:LinkButton ID="UpdateButton" runat="server" CausesValidation="True"

                CommandName="Update" Text="Actualizar" />

            &nbsp;<asp:LinkButton ID="UpdateCancelButton" runat="server"

                CausesValidation="False" CommandName="Cancel" Text="Cancelar" />

</EditItemTemplate>

<InsertItemTemplate>

            FieldName:

            <asp:TextBox ID="FieldNameTextBox" runat="server"

                Text='<%# Bind("FieldName") %>' />

            <br />

            <asp:LinkButton ID="InsertButton" runat="server" CausesValidation="True"

                CommandName="Insert" Text="Insertar" />

            &nbsp;<asp:LinkButton ID="InsertCancelButton" runat="server"

                CausesValidation="False" CommandName="Cancel" Text="Cancelar" />

</InsertItemTemplate>

<ItemTemplate>

            FieldName:

            <asp:Label ID="FieldNameLabel" runat="server"

                Text='<%# Eval("FieldName") %>' />

            <asp:LinkButton ID="EditButton" runat="server" CausesValidation="False"

                CommandName="Edit" Text="Editar" />

            &nbsp;<asp:LinkButton ID="DeleteButton" runat="server" CausesValidation="False"

                CommandName="Delete" Text="Eliminar" />

            &nbsp;<asp:LinkButton ID="NewButton" runat="server" CausesValidation="False"

                CommandName="New" Text="Nuevo" />

</ItemTemplate>

Los enlaces de su SmartTag son los siguientes:

clip_image012

Incluye plantillas de estilo.

Las plantillas disponibles son:

  • EditRowStyle
  • EmptyDataRowStyle
  • FooterStyle
  • HeaderStyle
  • InsertRowStyle
  • PagerStyle
  • RowStyle
  • EditItemTemplate
  • EmptyDataTemplate
  • FooterTemplate
  • HeaderTemplate
  • InsertItemTemplate
  • ItemTemplate
  • PagerTemplate

La propiedad DataKeyNames indica los valores de que campos (uno o varios) serán almacenados como campos clave de un registro.

Un saludo!

No hay comentarios:

Publicar un comentario