gpt4 book ai didi

c# - 如何通过用户控件公开 ITemplate?

转载 作者:太空狗 更新时间:2023-10-29 23:19:28 24 4
gpt4 key购买 nike

为了更轻松地创建某些表单,我们使用用户控件内的修改后的 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。我能弄清楚如何连接它的唯一方法是在 TabGrid 控件中有一个 ITemplate 并在 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 中用于更改的字典条目相关联的 EditItemTemplate 引用被销毁,因此当您获得发送到数据源的更改字典时,它们在每次回发时都是空的。

这里使用的 I2:ILDataSource 是最接近 ObjectDataSource 的自定义实现。它不是通用对象调用,而是直接调用 GetEntity()在页面(或本例中的用户控件)和 UpdateEntity(obj Entity)保存。由于这是一个非常具体的场景,我们可以消除 ObjectDataSource 中 90% 的代码。

我想要做的是指向 <EditItemTemplate><I2C:TabGrid>直接到 <EditItemTemplate><I2:FormView> 这可能吗,或者有人对另一条路线有建议吗?

注意:我尝试将 FVSubForm 上的 EditItemTemplate 作为代理属性公开,但这不起作用,因为该属性是在创建子控件之前在用户控件上设置的,因此 FVSubForm 为空。如果可以解决这个问题,我当然会洗耳恭听。

最佳答案

您需要做的一件事是将您的 ITemplate 属性标记为支持双向数据绑定(bind):

[TemplateContainer(typeof(FormView), System.ComponentModel.BindingDirection.TwoWay)]

否则,ASP.NET 将不会为允许 Bind() 表达式工作的页面生成正确的代码。

我不确定这是否就是您所需要的,但可以尝试一下。

大卫

关于c# - 如何通过用户控件公开 ITemplate?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1422107/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com