动态数据获取字段模板中的当前行数据

本文关键字:数据 数据获取 字段 动态 | 更新日期: 2023-09-27 18:08:34

我有一个动态数据网站,它有一个自定义字段模板,

CustomFieldTemplate_Edit.ascx

将在 内部使用的

ListDetails.aspx

表示某些页面。我已经设置了它,我需要它使用UIHint属性,我想实现一些自定义功能。为此,我需要一种方法来获取包含CustomFieldTemplate的当前行的数据。我该怎么做呢?

public partial class CustomFieldTemplate_Edit : System.Web.DynamicData.FieldTemplateUserControl
{
    protected void Page_PreRender(object sender, EventArgs e)
    {
        //Need to get current row data, or at least the primary key here
    }
}

我注意到FieldTemplateUserControl有一个Row属性,但我不知道如何使用它。当我试图访问它时,我得到这个错误:

"数据绑定方法,如Eval()、XPath()和Bind()只能是在绑定控件的上下文中使用。"

动态数据获取字段模板中的当前行数据

我在这里找到了一个解决方案。答案是FieldTemplateUserControlRow属性,但您必须在FieldTemplate的OnDataBinding事件中访问它。

获得行之后,您可以使用这些扩展方法(取自上面的链接)从中获取实体,这一切都像魅力一样工作。

public static class EntityDataSourceExtensions
{
    public static TEntity GetEntityAs<TEntity>(this object dataItem)
        where TEntity : class
    {
        var entity = dataItem as TEntity;

        if (entity != null)
            return entity;

        var td = dataItem as ICustomTypeDescriptor;

        if (td != null)
            return (TEntity)td.GetPropertyOwner(null);

        return null;
    }

    public static Object GetEntity(this object dataItem)
    {
        var td = dataItem as ICustomTypeDescriptor;

        if (td != null)
            return td.GetPropertyOwner(null);

        return null;
    }
}