Pregunta

Me está costando entender cómo se supone que funciona DataList Select/Unselect. Tenía la impresión de que cuando establece el SelectedIndex, el DL cambiará el interruptor de la pantalla del elemento a la plantilla apropiada.

El comportamiento que estoy viendo es: 1. Seleccione un elemento - Cambios de estilo, pero la plantilla no 2. Seleccione el mismo o diferente elemento nuevamente - Plantilla para los primeros cambios de elemento seleccionados. 3. Seleccione otro elemento nuevamente - Elemento seleccionado en los cambios de plantilla #2 4. etc.

He creado el siguiente código que reproduce el comportamiento para mí fielmente:

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

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

<script runat="server">

    // Method to handle DataList ItemCommand
    protected void dl_ItemCommand(object sender, DataListCommandEventArgs e)
    {
        DataList dl = sender as DataList;
        if (e == null || e.Item == null)
        {
            Trace.Write("dl_ItemCommand", "EventArgs.Item is null");
            throw new Exception("dl_ItemCommand: EventArgs.Item is null");
        }

        int selIdx = dl.SelectedIndex;

        Trace.Write("dl_ItemCommand", String.Format("{0}: {1}",
            e.CommandName.ToLower(), e.Item.ItemIndex));
        switch (e.CommandName.ToLower())
        {
            case "select":
                selIdx = e.Item.ItemIndex;
                break;
            case "unselect":
                selIdx = -1;
                break;
        }

        if (selIdx != dl.SelectedIndex)
            dl.SelectedIndex = selIdx;
    }


</script>

<html>
<head>
    <title>Test</title>
</head>
<body style="padding: 20px;">
<form runat="server" id="form1">

    <asp:DataList ID="dl" runat="server" 
        CellPadding="1" CellSpacing="1" BorderWidth="0px" Width="100%" 
        DataSourceID="ds" OnItemCommand="dl_ItemCommand">
        <SeparatorTemplate>
            <hr />
        </SeparatorTemplate>
        <ItemTemplate>
            <asp:Button ID="Button1" CommandName="select" runat="server" />
            Summary: <%# XPath("ID") %>
            <br />
        </ItemTemplate>
        <ItemStyle CssClass="ListItem" />
        <SelectedItemTemplate>
            <asp:Button ID="Button2" CommandName="unselect" runat="server" />
            <b>Detail: <%# XPath("ID")%></b>
            <br />
        </SelectedItemTemplate>
        <SelectedItemStyle BackColor="#f8f8f8" BorderColor="#888888" BorderStyle="Solid"
            BorderWidth="1px" />
    </asp:DataList>

    <asp:XmlDataSource ID="ds" runat="server" XPath="/List/Item">
        <Data>
            <List>
                <Item><ID>1889</ID></Item>
                <Item><ID>1890</ID></Item>
                <Item><ID>790</ID></Item>
                <Item><ID>4584</ID></Item>
                <Item><ID>4368</ID></Item>
                <Item><ID>4546</ID></Item>
            </List>
        </Data>
    </asp:XmlDataSource>
</form>
</body>
</html>

Cualquier ayuda sería muy apreciada.

Gracias.

No hay solución correcta

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top