DotNetcr.com
Si deseas hacer un intercambio de links con DotNetcr, escríbenos aquí
Recibe las actualizaciones vía RSS
Te invitamos a unirte en nuestras redes
   http://www.facebook.com/DotNetcr
   http://www.twitter.com/dotnetcr

Como utilizar el control ListBox con Ajax y ASP.NET

Por royrojas | 11/22/2009 | Visitas 8,130 | Voto 5.00
Cuando se usan dos ListBox, por ejemplo para categorías, al pasar de una lista a la otra, la página se volvía a cargar, pero con Ajax esto ya no es necesario
Categorías : VB.NET, ASP.NET, Ajax
Descargar ejemplo ListBoxWithAjax.rar

Como primer paso vamos a crear el ambiente de trabajo, se agregan los dos Listbox a una página nueva y dos botones para pasar o quitar datos de un control al otro. Al final debería de quedar algo así:

<table>
    <tr>
        <td>
            <asp:ListBox ID="ListBox1" runat="server" SelectionMode="Multiple" Width="100">
            </asp:ListBox>
        </td>
        <td>
            <asp:Button ID="btnAdd" runat="server" Text="&gt;" />
            <br />
            <asp:Button ID="btnDel" runat="server" Text="&lt;" />
        </td>
        <td>
            <asp:ListBox ID="ListBox2" runat="server" SelectionMode="Multiple" Width="100">
            </asp:ListBox>
        </td>
    </tr>
</table>

Es importante hacer notar que los controles Listbox deben llevar a propiedad Selection Mode en Multiple, por lo menos el segundo ListBox si es requerido.

Ahora vamos a cargar de datos el primer ListBox. En el CodeBehind vamos a agregar lo siguiente:

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not IsPostBack Then
            CargaDatos()
        End If
    End Sub

    'Esta funcion solamente sirve para agregar los datos en el ListBox
    'deberia ser reemplazada para la consulta real o la consulta a la base de datos
    Private Function GeneraDataTable() As Data.DataTable
        Dim dt As New Data.DataTable
        dt.Columns.Add(New Data.DataColumn("valor", GetType(Integer)))
        dt.Columns.Add(New Data.DataColumn("descripcion", GetType(String)))

        Dim dr As Data.DataRow
        dr = dt.NewRow
        dr("valor") = 1
        dr("descripcion") = "Primer Valor"
        dt.Rows.Add(dr)

        dr = dt.NewRow
        dr("valor") = 2
        dr("descripcion") = "Segundo"
        dt.Rows.Add(dr)

        dr = dt.NewRow
        dr("valor") = 3
        dr("descripcion") = "Tercer Valor"
        dt.Rows.Add(dr)

        Return dt
    End Function

    'Se agregan los datos en el Listbox 1, el que tiene los datos originales
    Private Sub CargaDatos()
        Me.ListBox1.DataSource = GeneraDataTable()
        Me.ListBox1.DataValueField = "valor"
        Me.ListBox1.DataTextField = "descripcion"
        Me.ListBox1.DataBind()
    End Sub

Ahora que ya tenemos la primera parte finalizada al ejecutar el sitio este se debería de ver con el primer Listbox lleno de datos:


El siguiente paso va a ser agregar el código AJAX en nuestra página web.

Al lado izquierdo tenemos el ToolBox, donde vamos a buscar la sección de Ajax llamada "AJAX Extensions"



El código de arriba, donde esta la tabla, los ListBox y los botones va a quedar contenido dentro del Update Panel.

Seleccionamos ScriptManager y lo agregamos en nuestro codigo, debe estar arriba de todos los controles AJAX, en este ejemplo lo vamos a colocar arriba de la tabla que contiene los controles.

Seguido a esto le agregamos UpdatePanel, lo seleccionamos y lo colocamos debajo del código de ScriptManager, seguido a esto le agregamos las etiquetas <ContentTemplate> y </ContentTemplate>, el resultado final sería algo así:

<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>

    </ContentTemplate>
</asp:UpdatePanel>

Ahora dentro de las etiquetas de <ContentTemplate> vamos a poner el código de la tabla que creamos en el punto 1.

<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>                       
    <table>
    <tr>
        <td>
            <asp:ListBox ID="ListBox1" runat="server" Width="100" SelectionMode="Multiple">
            </asp:ListBox>
        </td>
        <td>
            <asp:Button ID="btnAdd" runat="server" Text=">" />
            <br />
            <asp:Button ID="btnDel" runat="server" Text="<" /></td>
        <td>
            <asp:ListBox ID="ListBox2" runat="server" Width="100" SelectionMode="Multiple">
            </asp:ListBox>
        </td>
    </tr>    
    </table>        
</ContentTemplate>
</asp:UpdatePanel>

El siguiente paso es agregarle la funcionalidad a los botones para pasar los datos del ListBox1 al ListBox2 o eliminar los datos en el ListBox2.

En el CodeBehind agregamos los eventos de los dos botones.

    Protected Sub btnAdd_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnAdd.Click
        If Not Page.IsPostBack Then Exit Sub
        For Each i As ListItem In Me.ListBox1.Items
            If i.Selected Then
                Me.ListBox2.Items.Add(i)
            End If
        Next
    End Sub

    Protected Sub btnDel_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnDel.Click
        If Not Page.IsPostBack Then Exit Sub
        For Each i As Integer In Me.ListBox2.GetSelectedIndices
            Me.ListBox2.Items.RemoveAt(i)
        Next
    End Sub

Ya en este punto estamos listo para compilar la aplicación y probarla, podemos ver que al pasar datos del ListBox1 al ListBox2, la pagina no se carga nuevamente.


Descargar ejemplo ListBoxWithAjax.rar
Area de Comentarios
Por Anónimo - Fecha: 2010/01/28 11:02 PM
deberian poner mas ejemplos con ajax, aumentando la complejidad.
igual, gracias por este ejemplo, esta muy bueno
Por Anónimo - Fecha: 2010/05/19 08:34 PM
pronto tendremos ejemplos mas complejos.
Por Anónimo - Fecha: 2012/06/07 07:35 AM
Gracias, me sirvió
Por Anónimo - Fecha: 2012/07/21 01:47 AM
Hi everyone,I have a simliar problem, but inside a user control.Pratically I have a user control (ascx) with a tabcontainer, when I put the user control in a web page I have the error: Could not find any resources appropriate for the specified culture or the neutral culture. Make sure AjaxControlToolkit.Properties.Resources.resources was correctly embedded or linked into assembly AjaxControlToolkit at compile time, or that all the satellite assemblies required are loadable and fully signed. I followed your suggestions but it doesn't work, besides I noticed that I have this problem just with tabcontainer control, and not with others toolkit controls.Any idea.thanks a lot in advance
Por Anónimo - Fecha: 2012/07/22 05:08 PM
JycQ56 , [url=http://idnjrbmulrsr.com/]idnjrbmulrsr[/url], [link=http://oneodrbtctas.com/]oneodrbtctas[/link], http://qjhozxvapyqc.com/
Ingrese su Comentario
Comentario
Para poder votar debe estar registrado en DotNetcr.com
Solo queda registrado el primer voto enviado
Voto


Últimos Recursos
ibarra
dsevic
Eur
jota
juanjoguardiola
Víctor Carbajal
PER 237
MEX 236
CRI 185
COL 116
ESP 104
ARG 87