从 Kentico 10 中的自定义 table 转发器过滤重复的列值
Filtering duplicate column values from a custom table repeater in Kentico 10
在 Kentico 10 中,我为员工目录创建了自定义 table,其中包含姓名、职务、部门等列。
现在我想显示所有部门的列表。因此,我在我的页面中添加了一个自定义 table 中继器 Web 部件,将其数据源设置为我的自定义 table,并分配了一个转换来呈现每一行的部门列中的值。
这一切都按原样工作 - 但由于转发器遍历 table 中的每一行,页面最终显示多个重复的部门值。例如,如果 table 中有 10 名员工,其部门是 "Accounting,",那么 "Accounting" 会输出 10 次,而我只想显示一次。
如何修改它以便过滤掉重复的部门值,让我只剩下 唯一 个部门的列表?我想我必须以某种方式使用筛选器 Web 部件,但 Kentico 文档仅提供了一个不适用于此场景的非常具体的示例。
所以我以一种迂回的方式解决了这个问题,但它有效。
我没有尝试过滤掉重复项,而是创建了第二个自定义项 table,称为“部门”,并将所有部门名称作为单独的项目输入。
然后我将我的 Web 部件中的数据源更改为指向部门 table 而不是员工目录 table。这给了我一个没有任何重复的部门列表。
最后,我将员工目录 table 中部门字段(列)的数据源更改为从部门 table 中提取数据的 SQL 查询:
SELECT Department FROM customtable_Departments
现在,当我在员工目录 table 中添加或编辑项目时,我可以从下拉菜单中选择部门,该菜单与部门 table 中的任何内容保持同步。
这是一个渲染问题。您是否将结果呈现为 table,这里有一些想法:
<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 中,我为员工目录创建了自定义 table,其中包含姓名、职务、部门等列。
现在我想显示所有部门的列表。因此,我在我的页面中添加了一个自定义 table 中继器 Web 部件,将其数据源设置为我的自定义 table,并分配了一个转换来呈现每一行的部门列中的值。
这一切都按原样工作 - 但由于转发器遍历 table 中的每一行,页面最终显示多个重复的部门值。例如,如果 table 中有 10 名员工,其部门是 "Accounting,",那么 "Accounting" 会输出 10 次,而我只想显示一次。
如何修改它以便过滤掉重复的部门值,让我只剩下 唯一 个部门的列表?我想我必须以某种方式使用筛选器 Web 部件,但 Kentico 文档仅提供了一个不适用于此场景的非常具体的示例。
所以我以一种迂回的方式解决了这个问题,但它有效。
我没有尝试过滤掉重复项,而是创建了第二个自定义项 table,称为“部门”,并将所有部门名称作为单独的项目输入。
然后我将我的 Web 部件中的数据源更改为指向部门 table 而不是员工目录 table。这给了我一个没有任何重复的部门列表。
最后,我将员工目录 table 中部门字段(列)的数据源更改为从部门 table 中提取数据的 SQL 查询:
SELECT Department FROM customtable_Departments
现在,当我在员工目录 table 中添加或编辑项目时,我可以从下拉菜单中选择部门,该菜单与部门 table 中的任何内容保持同步。
这是一个渲染问题。您是否将结果呈现为 table,这里有一些想法:
<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>