为了简化某些表单的创建,我们在用户控件中使用了一个修改过的Formview控件。此用户控件用于网格和FormView,您可以在网格中选择项,并以模式显示FormView以供查看/编辑:
<I2CL:Grid runat="server" ID="Grid" OnSelecting="Selecting" ShowCreate="true" />
<I2:Modal ID="SFModal" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<I2:FormView runat="server" ID="FVSubForm" DefaultMode="Edit" DataSourceID="DSSubForm" />
<I2:ILDataSource ID="DSSubForm" runat="server" />
</ContentTemplate>
</I2:Modal>在页面中,控件如下所示:
<I2C:TabGrid ID="TG" runat="server" Property="ParentProperty">
<Columns>
<I2:Column Header="Column 1" DataSource="Column1" />
<I2:Column Header="Column 2" DataSource="Column2" />
</Columns>
<EditItemTemplate>
<I2Form:Dropdown ID="Col1" runat="server" SelectedValue='<%# Bind("Column1") %>' List="Column1Options" />
<I2Form:Textbox ID="Col2" runat="server" Text='<%# Bind("Column2") %>' />
</EditItemTemplate>
</I2C:TabGrid>问题在于我们使用的EditItemTemplate。我想知道如何将其连接起来的唯一方法是在ITemplate控件中有一个TabGrid,并在OnInit中应用该引用:
[PersistenceMode(PersistenceMode.InnerProperty),
TemplateContainer(typeof(FormView))]
public ITemplate EditItemTemplate { get; set; }
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
FVSubForm.EditItemTemplate = EditItemTemplate;
}这方面的问题是,因为引用是指向用户控件中的对象,因此与FormView中的字典条目绑定以进行更改的FormView引用被销毁,因此当您获得发送到数据源的更改字典时,它们在每次回发时都是空的。
这里使用的I2:ILDataSource是最接近ObjectDataSource的自定义实现。它直接调用页面中的GetEntity() (或本例中的用户控件)和要保存的UpdateEntity(obj Entity),而不是一般的对象调用。因为这是一个非常具体的场景,我们可以在ObjectDataSource中消除90%的代码。
我想要做的是将<EditItemTemplate> <I2C:TabGrid> 中的直接指向 <I2:FormView> 的 <EditItemTemplate> 。E 226这是否可能,或者有人对另一条路线有建议?
注意:我尝试将EditItemTemplate在FVSubForm上公开为一个代理属性,但这不起作用,因为该属性是在创建子控件之前在用户控件上设置的,因此FVSubForm为null。如果这件事能解决的话,我肯定会全神贯注的。
发布于 2009-09-23 00:30:10
您需要做的一件事是将您的ITemplate属性标记为支持双向绑定:
System.ComponentModel.BindingDirection.TwoWay),TemplateContainer(FormView)
否则,ASP.NET将无法为允许Bind()表达式工作的页面生成适当的代码。
我不确定这是不是你所需要的,但这是值得一试的。
大卫
https://stackoverflow.com/questions/1422107
复制相似问题