2015-08-18 2 views
1

У меня динамический веб-сайт данных, который имеет настраиваемый шаблон поля,Динамические данные получить текущие данные строки в шаблоне поля

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 имеет свойство, но я не знаю, как использовать его. При попытке доступа к нему, я получаю эту ошибку:

"Databinding methods such as Eval(), XPath(), and Bind() can only be used in the context of a databound control."

ответ

0

Я нашел решение here. Ответ свойство FieldTemplateUserControl, но вы должны получить к нему доступ в случае OnDataBinding события FieldTemplate.

После того, как вы получите строку, вы можете получить от нее сущности, используя эти методы расширения (взятые из ссылки выше), и все это работает как шарм.

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; 
    } 
}