小编Jni*_*Jni的帖子

使用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);
    }
}
Run Code Online (Sandbox Code Playgroud)

在这里实施:

<controls:BlocArrondi runat="server">
    <ContenuPrincipal>
        <asp:Label id="LabelInfo" runat="server" />
    </ContenuPrincipal>
</controls:BlocArrondi>
Run Code Online (Sandbox Code Playgroud)

我的标签LabelInfo可以在后面的代码上访问,太棒了!

但是,如果我在Repeater或ListView中使用我的自定义控件,我不能使用ContenuPrincipal模板中的Container.DataItem属性:

<asp:Repeater id="RepeaterInfos" runat="server">
    <ItemTemplate>
        <controls:BlocArrondi runat="server">
            <ContenuPrincipal> …
Run Code Online (Sandbox Code Playgroud)

asp.net data-binding custom-controls dataitem

6
推荐指数
1
解决办法
2290
查看次数

标签 统计

asp.net ×1

custom-controls ×1

data-binding ×1

dataitem ×1