6
自定義控件這是我的自定義服務器控件的代碼示例:數據綁定上了Itemplate
[Designer(typeof(ContainerControlDesigner))]
[ToolboxData("<{0}:BlocArrondi runat=server><ContenuPrincipal></ContenuPrincipal></{0}:BlocArrondi>")]
public class BlocArrondi : WebControl
{
private ITemplate _ContenuPrincipal;
protected Panel _PanelContenuPrincipal = new Panel();
public BlocArrondi()
: base(HtmlTextWriterTag.Div)
{
}
[PersistenceMode(PersistenceMode.InnerProperty)]
[TemplateInstance(TemplateInstance.Single)]
public ITemplate ContenuPrincipal
{
get { return _ContenuPrincipal; }
set { _ContenuPrincipal = value; }
}
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
_PanelContenuPrincipal.ID = "PanelPrincipal";
this.Controls.Add(_PanelContenuPrincipal);
if (_ContenuPrincipal != null)
_ContenuPrincipal.InstantiateIn(_PanelContenuPrincipal);
}
}
,並在這裏實現:
<controls:BlocArrondi runat="server">
<ContenuPrincipal>
<asp:Label id="LabelInfo" runat="server" />
</ContenuPrincipal>
</controls:BlocArrondi>
我的標籤LabelInfo是對代碼訪問的背後,巨大!
但是,如果我在一箇中繼器或一個ListView使用個性化的控制,我不能使用ContenuPrincipal模板內的Container.DataItem屬性:
<asp:Repeater id="RepeaterInfos" runat="server">
<ItemTemplate>
<controls:BlocArrondi runat="server">
<ContenuPrincipal>
<asp:Label runat="server" Text="<%# (Container.DataItem as MsgInfo).DisplayMessage() " />
</ContenuPrincipal>
</controls:BlocArrondi>
</ItemTemplate>
</asp:Repeater>
錯誤消息:
'System.Web.UI.Control'沒有包含'DataItem'的定義,也沒有找到接受類型'System.Web.UI.Control'的第一個參數的擴展方法'DataItem'(你是否缺少using指令或裝配參考?)
如何在控件的ContenuPrincipal模板中使用Container.DataItem屬性?
偉大的解決方案,您的問題。我來到幾乎相同。 – 2010-12-02 15:01:15