我正在使用项目转发器来显示保存在数据库中的表单列表。我可以使用DataBinder获取所有表单,但每个表单都按部门分类,我想为每个部门设置一个标题。截至目前,我有一个名为" Form"其中包含ID,Name,Link和Department(字符串)。我想按部门订购表格,当新部门出现时....放置正确的标题。
这就是我想让它看起来像:
这是标题的样子:
<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>
我需要知道如何检查部门与之前的部门不同并添加正确的标题图像。有什么建议吗?
答案 0 :(得分:3)
有两种相对简单的方法可以完成这项工作。
如果您确定传入的数据始终是排序的和线性的,您可以通过一些简单的调整来完成此操作。在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;
}
}
}
总伪代码。甚至没有检查正确的语法...
或者,为了更灵活,你可以更好地处理这个问题。