将CSS类设置为选定的ASP.NET Listview项

时间:2015-03-23 12:28:37

标签: c# css asp.net listview

我有一个列表视图,我希望突出显示点击的项目。 使用下面的代码,我可以设置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>

Codebehind如下。 我使用了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";
    }
}

1 个答案:

答案 0 :(得分:2)

好的,不要更改事件,因为您使用的是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";
    }

在循环中,您可以参考当前选定的项目,这是您的问题。 将循环更改为: - &gt;的

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