如何在ListView中明确地获取DataBound对象方法?

时间:2010-12-23 21:55:04

标签: c# listview

所以我正在使用ListView,我真的想使用声明性标记来生成已经在对象上的辅助方法中定义的数据。例如,如果我有一个ListView绑定到“Project”对象列表,并且我有一个名为“GetFormalProjName”的方法,该方法在“Project”类上定义,我如何从ListView的ItemTemplate中命中该方法?

看起来很容易击中我绑定的“Project”对象的任何子对象,我甚至可以用太多麻烦打击那些子对象的方法(见下文):

<%# ((EmpCoreView)Eval("EmpCoreView")).GetFullName() %>

在上面的例子中,“EmpCoreView”是“Project”对象的子对象,它是listView的这个Item的源。如您所见,我可以使用EmpCoreView对象的方法(“GetFullName()”是对象“EmpCoreView”上的方法)。但是对于“Project”对象上的方法,我似乎无法获得正确的语法来获取它们。我尝试使用“this”,如下所示:

<%# ((Project)Eval("this")).GetFormalProjName() %>

但这失败了因为'this'指的是ASPX页面。那么,如果我可以访问我的数据绑定对象子对象及其所有方法,那么如何获取数据绑定对象的方法呢?

我知道如何使用代码执行此操作,我只是想以声明方式执行此操作,并认为必须有一种我只是缺失的方式。谢谢!

2 个答案:

答案 0 :(得分:2)

我认为您可以引用Container.DataItem来引用您尝试执行的“this”指针:http://weblogs.asp.net/rajbk/archive/2004/07/20/what-s-the-deal-with-databinder-eval-and-container-dataitem.aspx

投射根对象后,您可以深入了解属性和方法。

答案 1 :(得分:0)

根据MSDN和Mono源代码,Eval方法采用属性的名称。所以你不能直接引用当前对象。作为一种变通方法,您可以添加一个返回对象本身的属性,然后您可以调用方法。或者,您实际上可以为要显示的值添加属性访问器,而不是调用方法。