【问题标题】:Get number of items in repeater during OnItemDataBound在 OnItemDataBound 期间获取中继器中的项目数
【发布时间】:2012-06-02 16:20:21
【问题描述】:

我试图在处理OnItemDataBound 事件时获取转发器中的项目数。我要实现的目标非常简单;我正在尝试在中继器内的最后一项隐藏某个标签。目前我正在连接ItemIndexItems.Count,但是在OnItemDataBound 期间,索引和计数一起增加。

这是我目前所得到的:

Label myLabel = e.Item.FindControl<Label>("MyLabel");
if (myLabel != null)
{
    // as the item index is zero, I'll need to check against the collection minus 1?
    bool isLastItem = e.item.ItemIndex < (((Repeater)sender).Items.Count - 1);
    myLabel.Visible = !isLastItem;
}

我知道我可以将 DataSource 强制转换为绑定的数据项的集合,但是 OnItemDataBound 事件处理程序正在跨多个转发器使用,所以我需要一些更通用的东西。

【问题讨论】:

    标签: c# asp.net .net collections web-controls


    【解决方案1】:

    你能做一些类似的事情吗,将Visible默认设置为false:

    if (e.Item.ItemIndex > 0)
    {
         var previousItem = ((Repeater)sender).Items[e.Item.ItemIndex - 1];
         var previousLabel = previousItem.FindControl<Label>("MyLabel");
         if (previousLabel != null)
         {
             previousLabel.Visible = true;
         }
    }
    

    我不确定这是否可行 - 在我看到你的代码之前,我不知道你可以访问 repeater.Items - 但这似乎是合理的。

    【讨论】:

    • 如果我试图隐藏 first 项目上的项目,这将起作用,但我想将其隐藏在 last 上。 :)
    • @Richard Yup... 默认情况下将Visible 设置为false,然后此代码将其设置为true,除了最后一项。 (在每个绑定上,它都会找到 previous 标签并显示它。)
    • 啊,是的,当然,d'uh。这是一个可能的解决方案,谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    • 2015-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多