asp.net中的DataBinder.Eval错误

时间:2011-11-04 07:53:07

标签: asp.net repeater databinder

我创建了一个类来做一些像GridView继承自System.Web.UI.WebControls.WebControl的工作。

public class IHGridView : System.Web.UI.WebControls.WebControl
{
    // inside here, actually return Repeater class.


    protected override void OnInit(EventArgs e)
    {
        _repeater.ItemTemplate = new IHGridItemTemplate(ListItemType.Item, this.Columns);
        this.Controls.Add(_repeater);
    }
}

我还在IHGridView中为我的转发器创建了ItemTemplate。

public class IHGridItemTemplate : ITemplate
{
}

IHGridView类返回Repeater和一些html代码,但为了方便deveop我已经创建了一些东西。

public class Columns : StateManagedCollection
{
}

public class IHBoundFieldBase : IStateManager
{
}

public class IHLabelField : IHBoundFieldBase
{
}

现在在我的aspx中,我可以像下面这样使用它:

<cc1:IHGridView ID="IHGridView1" runat="server" EditMode="View">
    <Columns>
         <cc1:IHLabelField ID="IHLabelField7" DataField="PERSON_NAME" HeaderText="PersonName" />
    </Columns>
</cc1:IHGridView>

现在我想出了一个问题。 我无法在aspx中使用DataBinder.Eval。

<cc1:IHLabelField ID="IHLabelField7" HeaderText="PersonName" Text='<%# DataBinder.Eval(Container.DataItem, "PERSON_NAME") %>' />

这给了我一个错误。 错误消息如下:CS1061:'System.Web.UI.Control'中没有'DataItem'的定义。 'System.Web.UI.Control'的第一个参数中没有可扩展的方法'DataItem'。请检查是否使用了量规或装配参考。这是用韩文写的,但我翻译成英文。 谁能给我一个解决这个问题的线索?

2 个答案:

答案 0 :(得分:1)

在模板化控件中,模板在容器中实例化。要使数据绑定在模板化字段中工作,它建议容器应该实现IDataItemContainer接口 - 接口实现应该提供数据项。

AFAIK,为了支持数据绑定表达式,ASP.NET解析器为控件(其属性使用这些表达式)注入DataBinding事件的处理程序,然后在处理程序中,它生成查找数据项的代码容器。

因此,在您的示例中,如果您希望在IHLabelField.Text属性中使用数据绑定表达式,则控件的命名容器应该实现IDataItemContainer或应该具有DataItem属性。因此,在这种情况下,您可能需要在DataItem控件上IHGridView - 并且它不会按照您想要的方式运行。

答案 1 :(得分:0)

这是我们使用的一个例子。我希望它有所帮助

   <asp:HyperLink ID="phoneManagementHyperLink" runat="server" Text='<%# (Container.DataItem as WcfUser).firstName + " " + (Container.DataItem as WcfUser).lastName%>'