Элементы управления привязкой данных внутри CompositeControl - PullRequest
1 голос
/ 08 ноября 2011

Я создал CompositeControl, который по сути является оберткой для MultiView, но если я пытаюсь использовать какие-либо элементы управления с привязкой к данным, такие как GridView или FormView внутри View, я получаю ошибку:

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, он работает!

1 Ответ

0 голосов
/ 06 декабря 2011

Вы можете наследовать CompositeDataBoundControl от CompositeControl

...