Hola, tengo problemas con la recursividad. Necesito hacer un menu, ha de ser recursivo porque entro en una lista de Sharedpoint a coger los datos que necesita este menu, en la lista (podemos decir que es una tabla) tiene los siguientes campos, Nombre, url, padre (el padre que tiene el item del menu)
El menu de manera manual seria como el siguiente:
System.Web.UI.WebControls.MenuItem _MenuItem = new MenuItem("Mi Sitio", "Mi Sitio", "", "http://www.google.es");
_MenuItem.PopOutImageUrl = "../../SiteCollectionImages/button_misitio.gif";
_MenuItem.ChildItems.Add(new MenuItem("Noticias", "Noticias", "", "Default.aspx"));
_MenuItem.ChildItems.Add(new MenuItem("Deportes", "Deportes", "", "Default.aspx"));
_MenuItem.ChildItems[1].ChildItems.Add(new MenuItem("Futbol", "Futbol", "", "Default.aspx"));
_MenuItem.ChildItems[1].ChildItems.Add(new MenuItem("Rugbi", "Rugbi", "", "Default.aspx"));
_MenuItem.ChildItems[1].ChildItems.Add(new MenuItem("Tenis", "Tenis", "", "Default.aspx"));
_MenuItem.ChildItems[1].ChildItems.Add(new MenuItem("masa", "masa", "", "Default.aspx"));
_MenuItem.ChildItems.Add(new MenuItem("Ocio", "Ocio", "", "Default.aspx"));
_MenuItem.ChildItems[2].ChildItems.Add(new MenuItem("Games", "Games", "", "Default.aspx"));
_MenuItem.ChildItems[2].ChildItems.Add(new MenuItem("Basket", "Basket", "", "Default.aspx"));
//Como heredamos del Menú de ASP, utilizamos el this para renderizar!
this.Items.Add(_MenuItem);
Tengo una funcion que me devuelve un array de items segun el padre que busco:
protected ArrayList GetSPListaMiSitio(string _Padre)
{
try
{
ArrayList _arrayReturn = new ArrayList();
SPSite _SPSite = SPControl.GetContextSite(Context);
SPWebCollection _SPWebCollection = _SPSite.AllWebs;
SPWeb _SPWeb = SPControl.GetContextWeb(Context);
SPList _SPList = _SPWeb.Lists["MiSitio"];
SPListItemCollection _SPListItemCollection = _SPList.Items;
foreach (SPListItem _SPListItem in _SPListItemCollection)
{
string _strPadre = (_SPListItem["Padre"] != null) ? _SPListItem["Padre"].ToString() : "";
if (_strPadre.Equals(_Padre))
{
_arrayReturn.Add(_SPListItem);
}
}
return _arrayReturn;
}
catch
{
return new ArrayList();
}
}
Y finalmente otra funcion que deberia de construir el menu:
protected virtual MenuItemCollection SPListToMenuItems(ArrayList _ArraySPList, string _Padre)
{
try
{
MenuItemCollection _MenuItemCollection = new MenuItemCollection();
if (_ArraySPList.Count != 0)
{
if (IsTrackingViewState)
{
((IStateManager)_MenuItemCollection).TrackViewStat e();
}
foreach (SPListItem _SPListItem in _ArraySPList)
{
// Create the menuitem
string _strItem = (_SPListItem["Item"] != null) ? _SPListItem["Item"].ToString() : "";
string _strURL = (_SPListItem["url"] != null) ? _SPListItem["url"].ToString() : "";
System.Web.UI.WebControls.MenuItem _MenuItem = new MenuItem(_strItem, _strItem, "", _strURL);
_MenuItemCollection.Add(_MenuItem);
}
foreach (MenuItem _MenuItem in _MenuItemCollection)
{
ArrayList _ArrayChilds = new ArrayList();
_ArrayChilds = GetSPListaMiSitio(_MenuItem.Text);
if (_ArrayChilds.Count != 0)
{
//MenuItemCollection _MenuItemCollectionChilds = SPListToMenuItems(_ArrayChilds, _strItem);
// _MenuItem.SubItems.AddRange(SPListToMenuItems(_Arr ayChilds, _MenuItem.Text, _MenuItemCollection));
_MenuItem.SubItems.AddRange(SPListToMenuItems(_Arr ayChilds, _MenuItem.Text));
_
}
}
}
return _MenuItemCollection;
}
catch
{
return new MenuItemCollection();
}
}
Si alguien puede echarme una mano, le estaria muy agradecido!