从 Kentico 10 中的自定义表重复器中过滤重复的列值

Posted

技术标签:

【中文标题】从 Kentico 10 中的自定义表重复器中过滤重复的列值【英文标题】:Filtering duplicate column values from a custom table repeater in Kentico 10 【发布时间】:2018-08-18 07:24:29 【问题描述】:

在 Kentico 10 中,我为员工目录创建了一个自定义表,其中包含姓名、职位、部门等列。

现在我想显示所有部门的列表。因此,我在我的页面中添加了一个自定义表转发器 Web 部件,将其数据源设置为我的自定义表,并分配了一个转换来呈现每行的部门列中的值。

这一切都按原样工作 - 但由于中继器会遍历表中的每一行,因此页面最终会显示多个重复的部门值。例如,如果表中有 10 位员工,其部门为“会计”,则“会计”输出 10 次,而我只想显示一次。

我如何修改它以便过滤掉重复的部门值,所以我只剩下 unique 部门的列表?我想我必须以某种方式使用过滤器 Web 部件,但 Kentico 文档仅提供了一个非常具体的示例,不适用于此场景。

【问题讨论】:

【参考方案1】:

所以我以一种迂回的方式解决了这个问题,但它确实有效。

我没有尝试过滤掉重复项,而是创建了第二个名为“部门”的自定义表,并将所有部门名称作为单独的项目输入。

然后,我将 Web 部件中的数据源更改为指向 Departments 表而不是 Employee Directory 表。这给了我一个没有任何重复的部门列表。

最后,我将Employee Directory表中Department字段(列)的数据源更改为从Department表中拉取数据的SQL查询:

SELECT Department FROM customtable_Departments

现在,当我在 Employee Directory 表中添加或编辑项目时,我可以从下拉菜单中选择部门,该菜单与 Department 表中的任何内容保持同步。

【讨论】:

【参考方案2】:

这是一个渲染问题。您是否将结果呈现为表格,这里有一些想法:

<script runat="server">
  string deparment = "";

  protected override void OnInit(EventArgs e) 
  
    string previousValue = "";
    if (CMS.GlobalHelper.RequestStockHelper.Contains("department"))
    
            previousValue = CMS.GlobalHelper.RequestStockHelper.GetItem("department") as string;
    

    string currentValue = Eval<string>("department");
    if (currentValue != PreviousValue) 
        deparment = currentValue;
        CMS.GlobalHelper.RequestStockHelper.SetValue("department", previousValue)
    
  
</script>

<table>
<tr>
  <td><%# deparment %></td>
  <td><%# Eval("Employee") %></td>
</tr>
</table>

【讨论】:

以上是关于从 Kentico 10 中的自定义表重复器中过滤重复的列值的主要内容,如果未能解决你的问题,请参考以下文章

Kentico,带有用于上传 CSV 的 Web 部件的模块

过滤数组列表或列表中的自定义对象[重复]

搜索结果转换中的多个索引不适用于Kentico

创建UI以管理Kentico中自定义模块中的多个类之间的关系

根据另一个表中的自定义属性过滤值

Kentico 无法将 EDM.GeographyPoint 类型设置为可过滤 n Azure 索引