Отображение свойств из другой таблицы - Kentico

мы только начали с Kentico и сейчас немного тестируем. Одна вещь, на которой мы застряли, - это отображение данных в преобразованиях.

У нас есть настраиваемая таблица, такая как Автор. У него есть поле ID, FirstName и SurName (оба текстовые). Книга является типом документа и имеет идентификатор, заголовок и раскрывающийся список, в котором мы можем выбрать автора.

На странице есть список данных, в котором я показываю книгу с такой трансформацией, как это:

<div style="text-align:center;padding: 8px;margin: 4px;border: 1px solid #CCCCCC">

    <h2>
    <%# Eval("Title") %> 
    </h2>
      Author: <%# Eval("Author.FirstName") %>
    </div>

Теперь мы хотим показать имя автора, но при использовании ‹% # Eval (" Author ")%> отображается идентификатор. Мы выяснили, что можем использовать пользовательскую функцию и возвращать имя, но разве нет другого способа? Допустим, мы хотим показать не только имя автора, но также адрес, электронную почту и так далее ... Действительно ли нам нужно создавать метод для каждого свойства, которое мы хотим показать?

Заранее спасибо,

Bjorn


person Bjorn Vdkerckhove    schedule 12.09.2013    source источник


Ответы (1)


Нет, вы не можете детализировать связанные таблицы таким образом, потому что данных автора просто нет в источнике данных, который вы показываете вместе со списком данных. Но вам не нужно создавать функцию для каждого свойства автора, которое вы хотите отобразить. Вы можете просто создать функцию, которая будет возвращать весь объект-автор, каковым в вашем случае является CustomTableItem. Функция может выглядеть так.

public CustomTableItem GetAuthor(object id)
{
    int authorId = ValidationHelper.GetInteger(id, 0);        
    var pr = new CustomTableItemProvider();
    var item = pr.GetItem(authorId, "customtable.author"); 

    return item;
}

Затем в преобразовании вы будете использовать метод GetValue () для получения значения.

Автор: ‹% # GetAuthor (Eval (" AuthorID "). GetValue (" FirstName "))%>

Имейте в виду, что каждый вызов функции будет выдавать запрос к базе данных, поэтому я бы предложил использовать какое-то кеширование. Либо кеш вывода для всей страницы, либо вы можете реализовать какой-то механизм кеширования непосредственно внутри функции.

Другой вариант, который у вас также есть, - использовать CustomQueryRepeater / DataSource и написать свой собственный SQL-запрос, в котором вы объединяете данные книги с данными автора. Тогда вы могли бы просто использовать <%# Eval("FirstName") %> непосредственно в вашем преобразовании.

person mivra    schedule 13.09.2013
comment
Чтобы получить настраиваемый элемент таблицы, вы используете: var pr = new CustomTableItemProvider (); var item = pr.GetItem (authorId, customtable.author); Как я могу это сделать, если это не настраиваемая таблица, а тип документа? - person Bjorn Vdkerckhove; 13.09.2013
comment
Тогда все немного сложнее. Вы должны использовать класс TreeProvider. Я бы посоветовал вам взглянуть на примеры API Kentico. Вы можете найти его на своем экземпляре веб-сайта Kentico, перейдите в раздел «Менеджер сайта» - «Поддержка» - «Примеры API». - person mivra; 19.09.2013