从 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 部件的模块