从aspx页面获取属性

问题描述:

我有一个包含detailsview的aspx页面。 此详细信息视图包含一个或多个模板字段。 我需要的是一个额外的属性(或元数据信息)来确定绑定的数据字段。从aspx页面获取属性

这样的一些东西将是很好(简体):

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

是有可能得到属性“数据字段”? 否则我会继承TemplateField并添加一个属性:)

+1

怎么办你想实现?为什么你需要一些额外的数据? – Arthur 2009-09-28 08:22:41

+0

你看过DetailsView上的可用事件吗? – 2009-09-28 09:32:21

+0

是否有适当的事件? 扩展TemplateField,似乎是最干净的方式 – 2009-09-28 10:17:59

我认为模板列的子类将做的工作:

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


    public String DataField 
    { 
     get { 
      return _dataField; 
     } 

     set { 
      _dataField = value; 
     } 
    } 
} 

现在u可以使用该领域中的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 2009-09-28 08:21:45

+0

我需要知道哪个字段由templatefield表示。 某些字段对特定用户是只读的,因此需要禁用字段。 – 2009-09-28 08:42:32

+0

这不是很好,但它解决了我的问题。 – 2010-02-26 14:02:48

我还没有这样做了一段时间,但我似乎记得如果您添加一个公共设置/获取“DataField”属性到TemplateField类,ASP。 NET应该用你在属性中传递的值自动初始化它。