代码之家  ›  专栏  ›  技术社区  ›  daGUY

从Kentico 10中的自定义表中继器中筛选重复列值

  •  0
  • daGUY  · 技术社区  · 8 年前

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

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

    这一切都按原样进行,但由于中继器迭代表中的每一行,因此页面最终会显示多个重复的部门值。例如,如果表中有10名员工的部门是“会计”,那么“会计”输出10次,而我只想显示一次。

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

    2 回复  |  直到 8 年前
        1
  •  0
  •   daGUY    8 年前

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

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

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

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

    SELECT Department FROM customtable_Departments
    

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

        2
  •  0
  •   Peter Mogilnitski    8 年前

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

    <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>