我需要为DataList中的每个项创建按钮,但最后一个按钮需要采用不同的格式,因此需要应用不同的css类。
我认为这应该在OntemDataBound方法中完成,但如果我错了,请随时纠正我。
我想做这样的事情:
protected void dlDataList_ItemDataBound(object sender, DataListItemEventArgs e)
{
if (e.Item.ItemIndex == dlDataList.Items.Count - 1) //This doesn't work like I'd hoped
{
Panel button = (Panel)e.Item.FindControl("btnButton");
button.CssClass = ("altClass");
}
...
}
问题是,我不认为datalist知道它在ItemDataBound事件中会有多少项,因为dlDataList.Items.Count总是与ItemIndex相同。
关于如何给出altClass css类的最后一个按钮的任何想法?
答案 0 :(得分:2)
在绑定DataList之前,请保存页面级变量中的项目总数。然后在ItemDataBound上,检查当前索引是否等于总项数(当然是-1)并相应地设置你的css类
答案 1 :(得分:0)
for (int i=0; i<= DataList1.Items.Count; i++)
{
if (e.Item[i] == dlDataList.Items.Count - 1) //This doesn't work like I'd hoped
{
Panel button = (Panel)e.Item.FindControl("btnButton");
button.CssClass = ("altClass");
}
}
答案 2 :(得分:0)
通常索引是基于零的,所以在一个包含5个元素的列表中,最后一个元素的索引将是4而计数为5所以如果从计数中减去1我认为它将起作用
答案 3 :(得分:0)
您需要查询DataList的DataSource而不是它的项目,因为这些项目是在数据绑定之前创建的。
protected void dlDataList_ItemDataBound(object sender, DataListItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
// use the item's DataItem property or the DataList's DataSource property directly
DataTable tbl = ((DataRowView)e.Item.DataItem).Row.Table;
if (e.Item.ItemIndex == tbl.Rows.Count - 1)
{
// ....
}
}
}
答案 4 :(得分:0)
正在为数据源中的每个对象触发ItemDataBound事件。因此,每次将一个项目添加到数据列表时,它的索引都会高1,但也会计数,因此它们不断相等。您应该与数据列表数据源属性进行比较并从中获取计数。数据源预先知道您的列表有多大。您只需将数据源转换为数据绑定的对象。
因此,如果它是List<string>
,您将使用类似的内容:
if (e.Item.ItemIndex == ((List<string>)dlDataList.DataSource).Count - 1)