0

我需要为 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");
  }
  ...
}

问题是,我认为数据列表不知道它在 ItemDataBound 事件中有多少项目,因为 dlDataList.Items.Count 始终与 ItemIndex 相同。

关于如何为最后一个按钮提供 altClass css 类的任何想法?

4

5 回答 5

2

在绑定 DataList 之前,将项目总数保存在页面级变量中。然后在您的 ItemDataBound 上,检查当前索引是否等于项目总数(当然是-1)并相应地设置您的 css 类

于 2012-04-27T23:13:19.890 回答
0

正在为数据源中的每个对象触发 ItemDataBound 事件。因此,每次将一个项目添加到数据列表时,它的索引都会增加 1,但您的计数也会增加,因此它们始终相等。您应该与数据列表数据源属性进行比较并从中获得计数。数据源预先知道您的列表有多大。您只需要将数据源转换为数据绑定到的对象。所以如果它是List<string>你会使用类似的东西:

if (e.Item.ItemIndex == ((List<string>)dlDataList.DataSource).Count - 1)

于 2012-04-27T23:27:09.220 回答
0

通常索引是从零开始的,所以在一个有 5 个元素的列表中,最后一个元素的索引将为 4,计数为 5,所以如果你从计数中减去 1,我认为它会起作用

于 2012-04-27T22:57:20.727 回答
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)
         {
             // ....
         }
    }
}
于 2012-04-27T23:00:02.883 回答
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");
      }
}
于 2012-04-27T22:53:37.567 回答