在ASP转发器中使用if-else语句

时间:2015-03-30 22:54:10

标签: c# asp.net

我正在使用项目转发器来显示保存在数据库中的表单列表。我可以使用DataBinder获取所有表单,但每个表单都按部门分类,我想为每个部门设置一个标题。截至目前,我有一个名为" Form"其中包含ID,Name,Link和Department(字符串)。我想按部门订购表格,当新部门出现时....放置正确的标题。

这就是我想让它看起来像:

enter image description here

这是标题的样子:

<a name="1"><img src="images/divider_accounting.gif" alt="" height="26px" width="480px"></a>

这就是我收到物品的方式:

<asp:Repeater ID="rptItemList" runat="server" 
     OnItemDataBound="rptItemListOnItemDataBound" 
     OnItemCommand="rptItemListOnItemCommand">
   <ItemTemplate>      
       <div class="form col-sm-12">
           <a href="<%#DataBinder.Eval(Container.DataItem,"Link").ToString() %>"><%#DataBinder.Eval(Container.DataItem,"Name").ToString() %></a>

           <asp:Panel ID="pnlAdmin" runat="server" Visible="false">
               <asp:HyperLink ID="lnkEdit" runat="server" ResourceKey="EditItem.Text" Visible="false" Enabled="false" />
               <asp:LinkButton ID="lnkDelete" runat="server" ResourceKey="DeleteItem.Text" Visible="false" Enabled="false" CommandName="Delete" />
           </asp:Panel>
       </div>
   </ItemTemplate>
</asp:Repeater>

我需要知道如何检查部门与之前的部门不同并添加正确的标题图像。有什么建议吗?

1 个答案:

答案 0 :(得分:3)

有两种相对简单的方法可以完成这项工作。

  1. 如果您确定传入的数据始终是排序的和线性的,您可以通过一些简单的调整来完成此操作。在itemtemplate中创建一个有条件可见的元素,并控制行数据绑定事件中的可见性。

    <asp:Repeater ID="rptItemList" runat="server" OnItemDataBound="rptItemListOnItemDataBound" OnItemCommand="rptItemListOnItemCommand">
    <ItemTemplate>
        <asp:Panel runat="server" id="departmentHeaderPanel" Visible="false">
            <a name="1"><img src="images/divider_accounting.gif" alt="" height="26px" width="480px"></a>
        </asp:Panel>  
    
        <div class="form col-sm-12"> 
            <a href="<%#DataBinder.Eval(Container.DataItem,"Link").ToString() %>"><%#DataBinder.Eval(Container.DataItem,"Name").ToString() %></a>  
    
            <asp:Panel ID="pnlAdmin" runat="server" Visible="false">
                <asp:HyperLink ID="lnkEdit" runat="server" ResourceKey="EditItem.Text" Visible="false" Enabled="false" />
                <asp:LinkButton ID="lnkDelete" runat="server" ResourceKey="DeleteItem.Text" Visible="false" Enabled="false" CommandName="Delete" />
            </asp:Panel>
        </div>
    </ItemTemplate>
    

    ///Somewhere define the last department as a property or field.
    var lastKnownDepartment = "";
    
    void ItemDataBound(Object Sender, RepeaterItemEventArgs e) {
    
      if (e.Item.ItemType == ListItemType.Item) {
         var departmentHeaderPanel = (Panel)e.Item.FindControl("departmentHeaderPanel");
         var currentForm = (Form)e.Item.DataItem;
         if(currentForm.department <> lastKnownDepartment)
         {
             lastKnownDepartment = currentForm.department;   
             departmentHeaderPanel.Visible = true;
         } else {
             departmentHeaderPanel.Visible = false;
         }
        }
       }    
    
  2. 总伪代码。甚至没有检查正确的语法...

    或者,为了更灵活,你可以更好地处理这个问题。

    1. 使用linq将表单分组到部门。然后有嵌套的中继器,外面有一个普通的中继器,每个部门重复一次。然后在该部门的表单上对内部转发器进行数据绑定。您可以在行数据绑定事件中再次执行此操作。