1

DataList の選択/選択解除がどのように機能するかを理解するのに苦労しています。SelectedIndex を設定すると、DL が変更され、アイテムの表示が適切なテンプレートに切り替わるという印象を受けました。

私が見ている動作は次のとおりです。 1.アイテムを選択します-スタイルは変更されますが、テンプレートは変更されません 2.同じまたは別のアイテムを再度選択します-最初に選択したアイテムのテンプレートが変更されます。3. 別のアイテムを再度選択 - #2 テンプレートの変更で選択したアイテム 4. など。

動作を忠実に再現する次のコードを作成しました。

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

どんな助けでも大歓迎です。

ありがとう。

4

1 に答える 1

1

問題はありdl_ItemCommandます。見逃しましたdl.DataBind()

これを試して

 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;
        dl.DataBind();
    }
于 2011-05-06T08:55:24.010 に答える