2009-09-28 1 views
0

У меня есть aspx-страница, содержащая детальное представление. это подробное описание содержит одно или несколько шаблонных полей. Мне нужен дополнительный атрибут (или информация метаданных) для определения связанного поля данных.Получение атрибутов из aspx-страницы

некоторые вещи, как это было бы хорошо (упрощенно):

<asp:DetailsView> 
    <fields> 
     <TemplateField DataField="DataField1"> 
      ... 
     </TemplateField> 
    </fields> 
</asp:DetailsView> 

возможно получить атрибут "DataField"? в противном случае я буду подклассифицировать TemplateField и добавить свойство :)

+1

Что делать вы хотите достичь? Зачем вам нужны дополнительные данные? – Arthur

+0

Вы посмотрели доступные события в DetailsView? –

+0

Есть ли подходящее событие? для расширения TemplateField, кажется, самый чистый способ –

ответ

0

я думал подклассов из TemplateField будет делать работу:

[AspNetHostingPermission(SecurityAction.Demand, Level=AspNetHostingPermissionLevel.Minimal)] 
[DefaultProperty("DataField")] 
public class DataTemplateField : TemplateField 
{ 
    private String _dataField; 


    public String DataField 
    { 
     get { 
      return _dataField; 
     } 

     set { 
      _dataField = value; 
     } 
    } 
} 

Теперь вы можете использовать это поле в DetailsView как этот

<Fields> 
    <dvt:DataTemplateField HeaderText="Feld1" DataField="DIS"> 
     <ItemTemplate> 
      <asp:Button runat="server" Text="Button" /> 
     </ItemTemplate> 
    </dvt:DataTemplateField> 
</Fields> 

и получить, что данные

protected override void OnPreRender(EventArgs e) 
{ 
    base.OnPreRender(e); 
    foreach(DetailsViewRow row in DetailsView1.Rows) 
    { 
     DataControlFieldCell cell = (DataControlFieldCell)row.Cells[1]; 
     if (cell.ContainingField is DataTemplateField) 
     { 
      var field = (DataTemplateField)cell.ContainingField; 
      cell.Enabled = !field.DataField.Equals(fieldToDisable); 
     } 
    }    
} 
+0

Подкласс не будет выполнять эту работу в вашем случае. То, что вы сделали, это присвоение строкового значения свойства «DataField». Это не будет связывать значение. – Arthur

+0

Мне нужно знать, какое поле представлено шаблоном. Некоторые поля предназначены только для определенных пользователей, поэтому поля должны быть отключены. –

+0

это не приятно, но оно решает мою проблему. –

0

Я не делал этого какое-то время, но, похоже, я помню, если вы добавите публичный набор/получите свойство «DataField» в класс TemplateField, ASP. NET должна автоматически инициализировать его значением, которое вы передаете в атрибуте.