【问题标题】:Databinding controls inside CompositeControlCompositeControl 中的数据绑定控件
【发布时间】:2011-11-08 11:14:07
【问题描述】:

我创建了一个 CompositeControl,它本质上是 MultiView 的包装器,但是如果我尝试在视图中使用任何数据绑定控件,例如 GridView 或 FormView,我会收到错误消息:

Databinding methods such as Eval(), XPath(), and Bind() can only be used in the context of a databound control.

我已将课程精简到最低限度,但我仍然收到错误消息。该类如下所示:

[DefaultProperty("Pages"), ParseChildren(true, "Pages"), ToolboxData("<{0}:TestTabs runat=\"server\"></{0}:TestTabs>")]
public class TestTabs : CompositeControl {

    private MultiView _multiViewControl;

    private Collection<View> _pages;
    public Collection<View> Pages {
        get {
            if (_pages == null) _pages = new Collection<View>();
            return _pages;
        }
    }

    protected override void CreateChildControls() {
        _multiViewControl = new MultiView();
        foreach (View page in Pages) { _multiViewControl.Views.Add(page); }
        if (_multiViewControl.Views.Count > 0) _multiViewControl.ActiveViewIndex = 0;

        this.Controls.Add(_multiViewControl);

        base.CreateChildControls();
    }
}

标记如下:

<cc:TestTabs ID="testTabs" runat="server">
    <asp:View runat="server">
        <asp:FormView ID="fvTest" runat="server">
            <ItemTemplate>
                <asp:Label ID="lblTest" runat="server" Text='<%#Eval("TestField")%>' />
            </ItemTemplate>
        </asp:FormView>
    </asp:View>
</cc:TestTabs>

如果我将 FormView 移到 CompositeControl 之外,它的数据绑定没有问题。此外,如果我使用标准的 MultiView,它也可以正常工作。

有什么想法吗?提前致谢(第一次发帖,如有遗漏,敬请见谅)

编辑:为了让事情变得更奇怪,如果我将 FormView 提取到一个单独的 ascx UserControl 并将其放入 View 中,它就可以工作!

【问题讨论】:

    标签: c# data-binding eval web-controls composite-controls


    【解决方案1】:

    你可以继承CompositeDataBoundControl insted of CompositeControl

    【讨论】:

    • 啊有趣,没想到。不幸的是,我已经找到了使用 Ajax TabContainer 的更好方法,但如果我有时间我会测试一下。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-27
    • 2011-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多