我创建了一个CompositeControl,它实际上是MultiView的包装器,但如果我尝试在View中使用任何数据绑定控件(如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中,它就可以了!
答案 0 :(得分:0)
您可以继承CompositeDataBoundControl
而不是CompositeControl