Foros del Web » Programación para mayores de 30 ;) » .NET »

Menu recursivo

Estas en el tema de Menu recursivo en el foro de .NET en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 17/11/2008, 05:46
 
Fecha de Ingreso: mayo-2008
Mensajes: 30
Antigüedad: 16 años
Puntos: 0
Menu recursivo

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!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:47.