什么是Container.DataItem?

28
Container.DataItem是什么?
2个回答

24

这篇文章 可以帮助你理解。引用内容如下:

<%# %> 是一个数据绑定表达式,Container.DataItem 是数据源中当前项的别名。换句话说,如果你绑定到一个对象集合,Container.DataItem就是该集合中的当前行。

这篇博客文章 给出了何时使用它的帮助。引用内容如下:

Container.DataItem 是绑定列表中此特定项的 DataItem 的运行时别名。对于显示10行数据的网格而言,这是数据源中的一行。DataItem 的实际类型取决于数据源的类型。例如,如果数据源是 DataView,则 DataItem 的类型为 DataRowView。如果数据源的类型是字符串数组,则 DataItem 的类型为字符串。如果数据源是强类型对象的集合(例如“Employees”对象),则 DataItem 的类型是 Employees。

每种情况都需要略微不同的数据绑定表达式,并且 VB 和 C# 之间存在进一步的差异。


数据源中的当前项确切意味着什么? - sly_Chandan
2
@chandan - 嗯,如果它是一个字符串数组 {'a','b','c'},那么 currentitem 就是当前正在处理的元素。在那个时间点上,它可能是 a、b 或 c。这回答了你的问题吗? - Sachin Shanbhag
你是指在运行时处理当前项,以绑定数据源中的特定数据项吗? - sly_Chandan
但是如果您正在尝试绑定到另一个数据源中的数据源,该怎么办?您如何引用特定的数据源?例如,我有一个控件绑定到一个sqldatasource。然而,Eval()假设数据源来自Gridview,而不是其中的控件! - Fandango68

7
我在尝试从代码后台访问Container.DataItem时遇到了同样的问题。 Container 存在于 aspx/ascx 代码中,但不存在于代码后台中。通过查看生成的 C# 代码,我发现这是绑定到特定控件上的 BindingContainer 的转换引用。
相当于 Container.DataItem 的代码后台代码如下:
var ddl = (DropDownList) source;
var dataItem = ((RepeaterItem) ddl.BindingContainer).DataItem;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接