I'm having a hard time understanding how DataList select/unselect is supposed to work. I was under the impression that when you set the SelectedIndex the DL will change switch the item display to the appropriate template.

The behavior I am seeing is: 1. Select an item - style changes, but template does not 2. Select same or different item again - template for first selected item changes. 3. Select another item again - item selected in #2 template changes 4. etc..

I've created the following code which reproduces the behavior for me faithfully:

<%@ 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>

Any help would be greatly appreciated.

Thanks.

没有正确的解决方案

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top