ASP.NET中的可折叠中继器

时间:2010-01-11 19:44:09

标签: asp.net javascript html repeater

我有一个转发器,目前显示这些县内的县和乡镇列表。除了具有不同的RowFormat属性之外,县记录和乡镇记录在重复器中被视为相同。每条记录还有一个唯一的ID和单位(无论是乡镇还是县)名称来显示。乡镇还有一个专栏来引用他们的父县。我利用转发器上的AlternatingItemTemplate选项在每个乡镇上显示交替的颜色。

我希望能够在每行单击“+”或“ - ”图像时显示和隐藏乡镇行。要将此图像仅添加到县行,我已向绑定的DataTable添加了一个额外的列,该列为空(对于乡镇)或包含包含“+”图像的表格单元格:

row["Image"] = "<img src='/includes/plus.gif' />";

这基本上就是我所追求的:

alt text

当用户点击县上的“+”或“ - ”图像时,我尝试调用JavaScript函数,但我不确定如何从javascript调用中访问所有子城镇以隐藏他们。我还需要切换countiy的Image字段来显示相反的图像(即来自'+' - &gt;' - ',反之亦然)。

<TABLE width="100%" style="border: thin solid #A3A3A3;" cellspacing="0px">
   <asp:repeater id="RepeaterUnits" Runat="server">
    <ItemTemplate>
        <tr '<%# (DataBinder.Eval(Container.DataItem, "RowFormat")) %>' >
            <td style="width: 16px" onclick='ClickCollapse(<%# (DataBinder.Eval(Container.DataItem, "UnitID")) %>);'>
                <%# (DataBinder.Eval(Container.DataItem, "Image")) %>
            </td>
            <td onclick='ClickUnit(<%# (DataBinder.Eval(Container.DataItem, "UnitID")) %>);' width="100%">
                <%# (DataBinder.Eval(Container.DataItem, "UnitName")) %>
            </td>
        </tr>
    </ItemTemplate>
    <AlternatingItemTemplate>
        <tr '<%# (DataBinder.Eval(Container.DataItem, "AltRowFormat")) %>'>
            <td style="width: 16px" onclick='ClickCollapse(<%# (DataBinder.Eval(Container.DataItem, "UnitID")) %>);'>
                <%# (DataBinder.Eval(Container.DataItem, "Image")) %>
            </td>
            <td onclick='ClickUnit(<%# (DataBinder.Eval(Container.DataItem, "UnitID")) %>);' width="100%">
                <%# (DataBinder.Eval(Container.DataItem, "UnitName")) %>
            </td>
        </tr>
    </AlternatingItemTemplate>
</asp:repeater>

我想过可能在数据网格中为每个县使用转发器来迭代每个县的乡镇,但是到目前为止我将每条记录存储在同一个数据库中,因此必须将县和乡镇分成多个表。谁能建议一种更好地接近这个的方法?我是ASP.NET的新手,所以我不知道我可以使用的所有选项。

2 个答案:

答案 0 :(得分:1)

你能把乡镇放在一个div中,然后简单地显示/隐藏那个div吗?

答案 1 :(得分:0)

如果您使用“县,乡镇”作为示例对两个列进行排序,您可以有效地循环遍历它,每次有一个新的县,您就会开始一个新的乡镇小组。

您可以在后面的代码中使用Repeater的ItemDataBound事件来执行每行所需的任何花哨格式化。