2013-09-12 3 views
0

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

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

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

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

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

Теперь мы хотим показать имя автора, но при использовании <% # Eval («Автор») %> показывает ID. Мы выяснили, что мы можем использовать пользовательскую функцию и вернуть имя, но не так ли? Скажем, мы не только хотим показать имя автора, но и адрес, электронную почту и т. Д.. Нам действительно нужно создать метод для каждого свойства, которое мы хотим показать?

Спасибо заранее,

Bjorn

ответ

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") ПолучитьЗначение ("FirstName"))%>

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

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

+0

Чтобы получить пользовательский табличный элемент, который вы используете: var pr = new CustomTableItemProvider(); var item = pr.GetItem (authorId, "customtable.author"); Как я могу это сделать, когда это не настраиваемый, а тип документа? –

+0

Тогда это немного сложнее. Вы должны использовать класс TreeProvider. Я бы предложил вам ознакомиться с примерами API Kentico. Вы можете найти его на своем экземпляре веб-сайта Kentico, перейдите в раздел «Управление сайтом - поддержка - примеры API». – mivra

Смежные вопросы