有没有简单的方法来设置 ListView 控件中最后一项的样式?基本上需要追加一个类。
干杯
逗号分隔客户名称列表。最后一个客户名称将以点结尾。
客户 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;
}
我让它工作了
<%#(Container.DataItemIndex == dataList.Count - 1 ? "last" : "")%>
其中 datalist 是在代码中构建并绑定到 listview 的自定义数据类。
我在 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
}
}
phoenix 的回答并没有真正回答这个问题,phoenix 建议使用不同的 css 类来设计最后一项,但是你怎么知道哪一项是最后一项呢?ListView 没有 LastItemTemplate。
您可以使用 <%# Container.DisplayIndex %> 来获取您在当前列表中的位置。您可以使用控件上的 Items.Count 来获得总数,但是将这两个东西结合起来稍微超出了我的 ASP.NET 技能。