0

詳細ビューを含むaspxページがあります。この詳細ビューには、1つ以上のテンプレートフィールドが含まれています。必要なのは、バインドされたデータフィールドを決定するための追加の属性(またはメタデータ情報)です。

そのようなものがいいでしょう(簡略化されています):

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

属性「DataField」を取得することは可能ですか?それ以外の場合は、TemplateFieldをサブクラス化し、プロパティを追加します:)

4

2 に答える 2

0

私はしばらくそれをしていませんでしたが、パブリックな set/get "DataField" プロパティを TemplateField クラスに追加すると、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 に答える