Использовать вычисляемое свойство как DisplayColumn в динамических данных ASP.Net? - PullRequest
3 голосов
/ 18 февраля 2009

Я пытаюсь отобразить таблицу «Выпуск ПО» на сайте динамических данных asp.net. Таблица Release содержит номер сборки, который хранится в трех полях типа int (Major, Minor, Build). Я использую EntityFramework, поэтому у меня есть модель EF, привязанная к моей схеме базы данных. На моем сайте с динамическими данными я хочу, чтобы номер сборки отображался в виде единого поля (Major.Minor.Build) везде, где отображается объект Release (особенно когда он отображается в виде внешнего ключа на страницах для связанных объектов). Поскольку этот «вычисляемый столбец» не является полем в моей базе данных, похоже, что в любом случае динамические данные не могут его распознать или отобразить. Я могу добавить свойство к объекту Release (так как это частичный класс, сгенерированный EF), но Dynamic-Data его не распознает, потому что это не «столбец». Я хочу отредактировать Релиз в виде трех отдельных полей (основных, второстепенных, сборочных), но когда он отображается, я хочу, чтобы он отображался как одно поле. Платформа DynamicData, похоже, не поддерживает составные поля и не будет отображать / привязывать свойства объекта, если они не входят в модель EF. Как сделать свойство номера версии в формате отображаемым значением по умолчанию?

Ответы [ 2 ]

4 голосов
/ 05 сентября 2009

Вы можете добавить класс метаданных так же, как и при любой пользовательской настройке динамического интерфейса данных. Затем вы создаете UIHint в метаданных, чтобы сообщить динамическим данным, какой элемент управления использовать для вашего пользовательского объекта. Е.Г.

[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;
}
3 голосов
/ 18 февраля 2009

Я не уверен, что вы привязываетесь к DataTable / DataSet, возвращенному из базы данных, или вы привязываетесь к самому объекту Release. Ни какой вид контроля.

Если вы привязываетесь к DataSet / DataTable, просто измените свой SQL, чтобы вернуть версию в виде одного поля:

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

Однако, если вы привязываетесь к объекту, скажем, DropDownList, я думаю , что если вы переопределите метод ToString, он станет значением Display в DropDownList:

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