Here is one way to do what I think you're trying to do. You put a repeater within a repeater to get the child objects within a DIV layer. The + image has an onclick event that uses the javascript function below to change the class of the DIV layer which will show the contents of the DIV layer and replaces the image + image with a - image. Its pretty straight forward.
<asp:Repeater ID="rptArea" Runat="server">
<ItemTemplate>
<img border="0" width="16" height="16" src="/images/icons/max_sm.gif" align="absmiddle" name="_Area<%#DataBinder.Eval(Container.DataItem, "AreaID")%>" alt="Maximize" onclick="javascript:showHide('Area<%#DataBinder.Ev al(Container.DataItem, "AreaID")%>');" />
<%#DataBinder.Eval(Container.DataItem, "AreaName")%><br />
<div id="Area<%#DataBinder.Eval(Container.DataItem, "AreaID")%>" class="<% Response.Write(_ShowHide) %>">
<asp:Repeater ID="rptSubarea" Runat="server">
<ItemTemplate>
<img border="0" src="/images/spacer.gif" width="16" height="0" align="absmiddle" />
<img border="0" src="/images/icons/max_sm.gif" width="16" height="16" align="absmiddle" name="_Sub<%#DataBinder.Eval(Container.DataItem, "SubID")%>" alt="Maximize" onclick="javascript:showHide('Sub<%#DataBinder.Eva l(Container.DataItem, "SubID")%>');" />
<%#DataBinder.Eval(Container.DataItem, "SubName")%><br />
</ItemTemplate>
</asp:Repeater>
</div>
</ItemTemplate>
</asp:Repeater>
function showHide(div)
{
var obj = document.getElementById(div).style;
obj.display = obj.display != 'block' ? 'block' : 'none';
if(document['_'+div].alt == "Maximize")
{
document['_'+div].src = "/images/icons/min_sm.gif";
document['_'+div].alt = "Minimize";
}
else
{
document['_'+div].src = "/images/icons/max_sm.gif";
document['_'+div].alt = "Maximize";
}
}
|