【问题标题】:setting CSS class to selected ASP.NET Listview Item将 CSS 类设置为选定的 ASP.NET Listview 项
【发布时间】:2015-03-23 12:28:37
【问题描述】:

我有一个列表视图,我想在点击时突出显示项目。 使用下面的代码,我可以设置 CSS 类。但是foreach循环并没有清除之前设置的css类。

<asp:ListView ID="ListView2" runat="server" SelectedIndex="0" onitemcommand="ListView2_ItemCommand">
    <ItemTemplate>
        <asp:Panel ID="Panel8" runat="server" CssClass="left-listitem-div">
            <asp:Image ID="Image1" runat="server" AlternateText="User Icon" ImageUrl='<%# Eval("UserType").ToString() == "AD_USER" ? "Images/icons/ldapuser32px.png" : "Images/icons/user32px.png"  %>'  CssClass="list-group-icon" />
            <asp:Label ID="ListUserID" runat="server"  Text ='<%#Eval("UserID") %>' CssClass="list-group-id" style="display:none;" />
            <asp:LinkButton ID="ListFullName" runat="server" Text='<%#Eval("FullName") %>' CssClass="list-group-name" CommandName="select" CommandArgument = '<%# Eval("UserID") %>'  Font-Underline="False" ForeColor="Black" Width="130" Height="30" />
            <asp:Label ID="ListUserName" runat="server" Text='<%#Eval("UserName") %>' CssClass="list-group-username" style="display:none;"  />
            <asp:Label ID="ListUserType" runat="server" Text='<%#Eval("UserType") %>' CssClass="list-group-usertype" style="display:none;"  />
            <asp:Label ID="ListUserEnabled" runat="server" Text='<%#Eval("Enabled") %>' CssClass="list-group-enabled" style="display:none;"  />
            <asp:Label ID="ListUserDescription" runat="server" Text ='<%#Eval("Description") %>' CssClass="list-group-descri" style="display:none;" />
        </asp:Panel>
    </ItemTemplate>
</asp:ListView>

代码隐藏如下。 我使用了 SelectedItemTemplate,但 Listview selectedIndex 没有改变。 如果我在 ItemCommand 事件上设置 selectedIndex,它只会在下一次回发时影响。

protected void ListView2_ItemCommand(object sender, ListViewCommandEventArgs e)
{
    if (e.Item.FindControl("Panel8") != null && e.Item.FindControl("Panel8") is Panel)
    {
        foreach (ListViewItem li in ListView2.Items)
        {
            Panel lipp = (Panel)e.Item.FindControl("Panel8");
            lipp.CssClass = "left-listitem-div";
        }
        Panel pp = (Panel)e.Item.FindControl("Panel8");
        pp.CssClass = "left-listitem-div selected";
    }
}

【问题讨论】:

    标签: c# css asp.net listview


    【解决方案1】:

    好的,不要更改事件,因为您使用 commandEventargs。 只需设置列表视图的 SelectIndex,然后更改该项目的 css。

    protected void ListView2_ItemCommand(object sender, ListViewCommandEventArgs e)
        {
            (sender as ListView).SelectedIndex = e.Item.DataItemIndex;
            (e.Item.FindControl("Panel8") as Panel).CssClass += "SelectedCss";
        }
    

    在循环中,您总是引用当前选定的项目,这是您的问题。 将循环更改为:--> li

    foreach (ListViewItem li in ListView2.Items)
        {
            Panel lipp = (Panel)li.FindControl("Panel8");
            lipp.CssClass = "left-listitem-div";
        }
    

    【讨论】:

    • 您好,我已经测试过了。选定的样式设置完美。但是,foreach 循环内部的一个(重置其他项目的样式)根本不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 2011-08-28
    • 1970-01-01
    相关资源
    最近更新 更多