0

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

这样的事情会很好(简化):

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

是否可以获得属性“DataField”?否则我将继承 TemplateField 并添加一个属性:)

4

2 回答 2

0

我已经有一段时间没有这样做了,但我似乎记得如果您向 TemplateField 类添加一个公共 set/get“DataField”属性,ASP.NET 应该使用您在属性中传递的值自动对其进行初始化。

于 2009-09-28T07:50:34.427 回答
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;
        }
    }
}

现在您可以像这样在详细信息视图中使用此字段

<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);
        }
    }            
}
于 2009-09-28T07:57:26.273 回答