4

有没有简单的方法来设置 ListView 控件中最后一项的样式?基本上需要追加一个类。

干杯

4

5 回答 5

4

逗号分隔客户名称列表。最后一个客户名称将以点结尾。

客户 A、客户 B、客户 C。

<asp:ListView ID="lvCustomers" runat="server">
  <LayoutTemplate>
    <div id="itemPlaceHolder" runat="server"></div>
  </LayoutTemplate>
  <ItemTemplate>
    <%# Eval("CustomerName")<%# Container.DisplayIndex == (Container.BindingContainer.As<ListView>().DataSource.As<System.Collections.Generic.List<String>>().Count - 1) ? "." : ", " %>
  </ItemTemplate>
</asp:ListView>

这使用扩展方法“As”:

/// <summary>
/// Returns this object casted as a different type.
/// </summary>
/// <typeparam name="T">A type</typeparam>
/// <param name="obj">An object</param>
/// <returns>A boolean value.</returns>
public static T As<T>(this object obj) where T : class
{
    if (obj == null) return null;

    return obj as T;
}
于 2009-12-18T10:19:41.557 回答
3

:最后一个孩子

伪类。

但不适用于所有浏览器。

最好的方法是在列表视图的最后一项中添加一个 css 类并设置它的样式。

如果您可以使用 jQuery,那么您可以使用

:最后一个孩子

选择器

于 2009-09-25T07:02:59.140 回答
3

我让它工作了

<%#(Container.DataItemIndex == dataList.Count - 1 ? "last" : "")%>

其中 datalist 是在代码中构建并绑定到 listview 的自定义数据类。

于 2012-10-03T20:09:34.223 回答
1

我在 ItemDataBound listview 事件中做这种事情。但为此,我需要知道 DataSource 的类型。

例如:

protected void LvFilters_ItemDataBound(object sender, ListViewItemEventArgs e)
{
    if (e.Item.ItemType == ListViewItemType.DataItem)
    {
        ListViewDataItem item = e.Item as ListViewDataItem;
        if(item.DataItemIndex == ((YourDataSourceType)lvFilters.DataSource).Count - 1)
            e.Item.FindControl("Control's id here").Visible = false; // or whatever you wanna do about styling
    }
}
于 2010-02-16T13:21:58.990 回答
0

phoenix 的回答并没有真正回答这个问题,phoenix 建议使用不同的 css 类来设计最后一项,但是你怎么知道哪一项是最后一项呢?ListView 没有 LastItemTemplate。

您可以使用 <%# Container.DisplayIndex %> 来获取您在当前列表中的位置。您可以使用控件上的 Items.Count 来获得总数,但是将这两个东西结合起来稍微超出了我的 ASP.NET 技能。

于 2009-10-23T14:54:58.020 回答