如何访问DataList中的最后一项以设置其类?

时间:2012-04-27 22:47:50

标签: c# asp.net

我需要为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类的最后一个按钮的任何想法?

5 个答案:

答案 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)