2009-09-28 82 views
0

我有一個包含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

回答

0

我認爲模板列的子類將做的工作:

[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

0

我還沒有這樣做了一段時間,但我似乎記得如果您添加一個公共設置/獲取「DataField」屬性到TemplateField類,ASP。 NET應該用你在屬性中傳遞的值自動初始化它。