.net - 动态添加的 Web.UI.ITemplate 类的最佳实践

标签 .net asp.net

我们有几个 ASP.Net 数据 View 列模板,它们根据用户选择的列动态添加到数据 View 中。

这些模板化单元需要处理自定义数据绑定(bind):

public class CustomColumnTemplate: 
    ITemplate
{
    public void InstantiateIn( Control container )
    {
        //create a new label
        Label contentLabel = new Label();

        //add a custom data binding
        contentLabel.DataBinding +=
            ( sender, e ) =>
            {
                //do custom stuff at databind time
                contentLabel.Text = //bound content
            };

        //add the label to the cell
        container.Controls.Add( contentLabel );
    }
}

...

myGridView.Columns.Add( new TemplateField
    {
       ItemTemplate = new CustomColumnTemplate(),
       HeaderText = "Custom column"
    } );

首先,这看起来相当困惑,但也存在资源问题。 Label已生成,无法在 InstantiateIn 中处理因为那样它就不会在那里进行数据绑定(bind)。

这些控件有更好的模式吗?

有没有办法确保在数据绑定(bind)和渲染之后处理标签?

最佳答案

我已经广泛使用模板控制,但我还没有找到更好的解决方案。

为什么要在事件处理程序中引用 contentLable?

发件人是标签,您可以将其转换为标签并具有对标签的引用。如下所示。

        //add a custom data binding
        contentLabel.DataBinding +=
            (object sender, EventArgs e ) =>
            {
                //do custom stuff at databind time
                ((Label)sender).Text = //bound content
            };

然后您应该能够在 InstantiateIn 中处理标签引用。

请注意,我没有对此进行测试。

关于.net - 动态添加的 Web.UI.ITemplate 类的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29976/

相关文章:

.net - 如何将对本地创建的非 ASP.Net 5 dll 的引用添加到 ASP.Net 5 项目

c# - 将类型转换为通用类定义

c# - 最小化 ASP.Net 中的 ViewState 大小,在构造函数中初始化控件值与 OnInit 之间有区别吗?

c# - Windows 7 中的鼠标移动 - 左键单击并拖动

c# - 从 channel 获取所有视频 - Youtube API v3 c#

c# - .NET 内存泄漏

asp.net - HttpContext.Current 在 IIS7 集成模式下不存在

asp.net - View 中对象或输出的缓存 : Which is better?

c# - 检测输入是否为格式化数字的正则表达式

c# - 使用 Azure 的 '/' 应用程序中的服务器错误