显示另一个表中的属性-Kentico

显示另一个表中的属性-Kentico,kentico,Kentico,我们刚从Kentico开始,现在正在进行一些测试。我们一直坚持的一件事是在转换中显示数据 我们有一个像Author这样的自定义表。它包含ID字段、名字和姓氏(均为文本)。 书是一种文档类型,有一个ID、标题和一个下拉列表,我们可以在其中选择作者 在页面a上有一个数据列表,我在其中显示带有预览转换的书籍,如下所示: <div style="text-align:center;padding: 8px;margin: 4px;border: 1px solid #CCCCCC">

我们刚从Kentico开始,现在正在进行一些测试。我们一直坚持的一件事是在转换中显示数据

我们有一个像Author这样的自定义表。它包含ID字段、名字和姓氏(均为文本)。 书是一种文档类型,有一个ID、标题和一个下拉列表,我们可以在其中选择作者

在页面a上有一个数据列表,我在其中显示带有预览转换的书籍,如下所示:

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

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

作者:
现在我们想显示作者的名字,但是当使用它时,它会显示ID。我们发现我们可以使用自定义函数并返回名字,但是没有其他方法吗?假设我们不仅要显示作者的姓名,还要显示地址、电子邮件等。。。我们真的需要为每个要显示的属性创建一个方法吗

提前感谢,


Bjorn

不,您不能以这种方式钻取相关表,因为作者的数据根本不在与数据列表一起显示的数据源中。 但您不必为要显示的作者的每个属性创建函数。您可以只创建一个函数,它将返回整个author对象,在您的例子中是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()方法获取值

作者:

请注意,函数的每次调用都会发出一个数据库请求,因此我建议使用某种缓存。可以对整个页面进行输出缓存,也可以直接在函数内部实现一些缓存机制


另一个选项是使用CustomQueryRepeater/DataSource编写自己的SQL查询,将书籍数据与作者数据连接起来。然后您可以在转换中直接使用

来获取您使用的customtableitem:var pr=new CustomTableItemProvider();var item=pr.GetItem(authord,“customtable.author”);当它不是customtable而是documenttype时,我该怎么做呢?这样就更复杂了。您必须使用TreeProvider类。我建议您参考Kentico API示例。您可以在Kentico网站实例上找到它,请转到site manager-Support-API示例。