在ASP.Net动态数据中使用Computed Property作为DisplayColumn?

时间:2009-02-17 23:19:22

标签: asp.net dynamic-data

我正在尝试在asp.net动态数据站点中显示“软件版本”表。 Release表的内部版本号存储为三个int字段(Major,Minor,Build)。我正在使用EntityFramework,所以我有一个绑定到我的数据库模式的EF模型。在我的动态数据站点中,我希望构建号显示为单个字段(Major.Minor.Build),无论何处显示Release对象(特别是当它在相关对象的页面上显示为外键时)。由于此“计算列”不是我的数据库中的字段,因此似乎无法使动态数据识别或显示它。我可以向Release对象添加一个属性(因为它是由EF生成的部分类),但Dynamic-Data将无法识别它,因为它不是“列”。我想将Release编辑为三个单独的字段(主要,次要,构建),但是当它显示时,我希望它显示为单个字段。 DynamicData框架似乎不支持复合字段,如果它们不在EF模型中,它将不会显示/绑定到对象上的属性。如何将格式化版本号属性设置为默认显示值?

2 个答案:

答案 0 :(得分:4)

您可以像执行任何动态数据ui自定义一样添加元数据类。 然后在元数据中创建UIHint,以告知动态数据用于自定义对象的控件。 E.G。

[MetadataType(typeof(EMetadata))]
public partial class E{


    public string RefNR {
        get {
            return "E" + this.EntryID.ToString().PadLeft(5, '0');
        }
    }

}

public partial class EMetadata {
    [UIHint("Text")]
    public object RefNR;
}

答案 1 :(得分:3)

我不确定您是否绑定到从数据库返回的DataTable / DataSet,或者您是否绑定到Release对象本身。也不是哪种控制。

如果您绑定到DataSet / DataTable,只需更改SQL以将版本作为一个字段返回:

SELECT table1.Major + '.' + table1.Minor + '.' + table1.Build AS Version ....

但是,如果你绑定一个对象,比如一个DropDownList,我如果你重写ToString方法,它将成为DropDownList中的Display值:

Public Overrides Function ToString() As String
    Return _major.ToString & '.' & _minor.ToString & '.' & _build.ToString
End Sub