Как изменить способ отображения фильтров и столбцов внешнего ключа на сайте DynamicData? - PullRequest
3 голосов
/ 15 января 2010

Хорошо, мой заголовок не помогает. Но прочитайте пост, и вы поймете.

Что я хочу сделать:

Представьте, что у меня есть таблица Flyer с 2 столбцами на моем сервере SQl:

  • FlyerID (int) (PK)
  • FlyerDate (smalldatetime)

FlyerID - это внешний ключ для других таблиц, например для таблицы Store. Магазин имеет 3 столбца:

  • StoreID (int) (PK)
  • Имя (nvarchar)
  • FlyerID (int) (FK) отношения с Флаер стол

Теперь на сайте DynamicData у меня будет страница «Магазины» и «Листовки». Я хочу отобразить FlyerDate, используя мой собственный формат. Формат MMM-дд-гггг, например.

На странице Flyers способ, который я реализовал после видео-урока по адресу: asp.net/learn/3.5-SP1/video-291.aspx, отлично работает, отображая мой собственный формат для столбца FlyerDate.

На странице «Магазины», однако, значения столбца Flyer (которые являются гиперссылками) не показывают дату в моем произвольном формате. Также в фильтре (выпадающий список) не отображается пользовательский формат.

Рекомендованное сбойное решение по адресу: http://ericphan.info/development/asp-net-dynamic-data-display-custom-text-in-a-foreign-key-dropdownlist-combobox выдает ошибку "Указанный для таблицы столбец отображения 'DisplayDate' не существует."

.Net Framework 4.0 BETA и Entity Framework.

[DisplayColumn("DisplayDate", "FlyerDate", true)]
[MetadataType(typeof(FlyerMetadata))]
public partial class Flyer
{

    [ScaffoldColumn(true)]
    public string DisplayDate
    {
        get { return this.FlyerDate.ToString("MMM-dd-yyyy"); }
    }

}

public class FlyerMetadata
{
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MMM-dd-yyyy}")]
    public DateTime FlyerDate { get; set; }
}

Ответы [ 2 ]

1 голос
/ 17 апреля 2013

Ваше свойство DisplayDate имеет правильное форматирование, поэтому просто укажите его в метаданных:

public class FlyerMetadata
{
    public String DisplayDate { get; set; }
}
1 голос
/ 21 января 2010

Я знаю, что это должно быть сделано. Переопределить ToString:

public partial class Flyer
{

    public override string ToString()
    {
        return this.FlyerDate.ToString("MMM-dd-yyyy");
    }

}
...