2011-11-04 38 views
0

我已經創建了一個類,像GridView從System.Web.UI.WebControls.WebControl繼承一些工作。在asp.net DataBinder.Eval錯誤

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代碼,但爲了方便起見,我創建了一些東西。

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'。請檢查是否使用了標準或裝配參考。這是用韓語寫的,但我翻譯成英文。 任何人都可以給我一個線索來解決這個問題嗎?

回答

1

在模板化控件中,模板在容器中實例化。要使數據綁定在模板字段中工作,建議容器應實現IDataItemContainer接口 - 接口實現應提供數據項。 AFAIK,爲了支持數據綁定表達式,ASP.NET解析器爲控件(其屬性使用這些表達式)注入事件的處理程序,然後在處理程序中生成在容器中查找數據項的代碼。

因此,在您的示例中,如果您希望在IHLabelField.Text屬性中使用數據綁定表達式,那麼控件的命名容器應該實現IDataItemContainer或應具有DataItem屬性。因此,在這種情況下,您可能需要DataItem控制IHGridView控制 - 它不會按照您想要的方式工作。

+0

非常感謝。我終於找到了解決問題的線索。 –

0

這裏是我們使用的一個例子。我希望它能幫助

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