2010-01-11 30 views
2

我有一个中继器,它目前显示这些县内的县和乡镇的列表。除了具有不同的RowFormat属性之外,县级记录和乡镇记录在重复器中的处理方式相同。每条记录还有一个唯一的ID和要显示的单位(无论是乡镇还是县)。还有一个乡镇参考其母县的专栏。我利用转播器上的AlternatingItemTemplate选项在每个乡镇上显示交替的颜色。ASP.NET中的可折叠中继器

我希望能够在每行上点击'+'或' - '图像时显示和隐藏乡镇行。向该图像添加到仅县行我已经添加一个附加列到绑定数据表其是空的(对于乡镇)或包含含有的“+”图像的TableCell:

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

这基本上我所追求的:我已经试过调用JavaScript功能,当用户点击“+”或

alt text http://img85.imageshack.us/img85/9586/counties.png

“ - ”图像上的县,但我真的不知道如何通过javascript调用访问所有的小镇,以隐藏它们。我还需要切换countiy的Image域来显示相反的图像(即从'+' - >' - ',反之亦然)。

<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比较陌生,所以我不知道所有可用的选项。

回答

1

你可以把乡镇里的一个div,然后简单地显示/隐藏该div?

+0

问题在于直放站没有在乡镇之间划分,所以我没有办法将乡镇划分为一个单独的分区。此外,乡镇有交替的背景颜色(很难从图像中分辨出来),这就是为什么我使用alternatingItemTemplate的原因。 – Kevin 2010-01-11 19:58:08

+1

你的数据是分层存储的吗?如果是这样,您将使用嵌套中继器来达到预期的效果,而不必使用多个表。 – 2010-01-11 20:17:09

+0

@Alison不幸的是,它不是按层次存储的,而乡镇在技术上是县的“孩子”,数据表并没有区分这一点。不过,我会寻找嵌套的中继器,看看我能否完成我所追求的。 – Kevin 2010-01-11 20:26:33

0

如果您按照“县,乡镇”的示例对两列进行排序,则可以有效地循环访问,每当有新的县时,就会开始一组新的乡镇。

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