中继器控制 - 取消特定项目的绑定

Jam*_*xon 7 asp.net binding repeater

在转发器控件中,是否有一种方法可以在呈现页面之前对某些项目进行解除绑定?

目前我们有一组项目被绑定到转发器,如果​​该项目不是当前语言的一部分,我们隐藏该项目.

我希望能够对转发器进行计数并获得有效数字.计数不包括隐藏的项目.

是否有可能在ItemDataBound事件中解除特定项目的约束?

更新

对于我们绑定的集合中的每个项目,我们在期间检查数据库ItemDataBound以获取有关该项目的更多信息,例如语言等.这当前阻止我们在绑定之前过滤绑定数据.

Jef*_*nal 2

我同意其他答案 - 最好的解决方案(为了性能和代码清晰度)是重新设计页面,以便您可以在数据绑定之前过滤掉无效条目。

大多数数据源不允许我们在 ASP.NET 迭代它们时删除它们的项目。例如,如果您绑定到一个简单的泛型List<T>,并且在迭代时删除一个项目,则列表将抛出一个InvalidOperationException.

在其他情况下,ASP.NET 实际上迭代数据源的副本。如果绑定到DataTable,ASP.NET 使用内容的副本(默认 DataView)而不是迭代源行本身 - 您可以在迭代时从基础数据源中删除项目,但这不会影响数据绑定操作。

如果确实无法提前过滤项目,那么您当前的解决方案很好:只需隐藏项目即可!如果您需要获得正确的计数,请跟踪 ItemDataBound 处理程序中无效项目的数量并将其公开为页面级属性:

if (IsInvalid(args.Item.DataItem)) {
    this.invalidItemCount++;
    // code to hide the current item
}
Run Code Online (Sandbox Code Playgroud)