problemer med EasyMenu
Hej alle.Jeg har et lille problem.
Jeg er igang med at opdatere en side fra ASP til ASP.NET, og i den forbindelse har jeg fundet Obout's EasyMenu, som skal implementeres.
Fair nok, det så jo rimelig nemt ud, og det var også forholdsvist nemt at få oprettet selve menuen, men når jeg skal lave undermenuerne går det galt.
Jeg får følgende fejl: The control collection cannot be modified during DataBind, Init, Load, PreRender or Unload phases.
Min kode ser sådan her ud:
using System;
using System.Data;
using System.Data.Sql;
using System.Data.SqlClient;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using MySql.Data.MySqlClient;
using System.Data.OleDb;
using OboutInc.EasyMenu_Pro;
public partial class golfon : System.Web.UI.MasterPage
{
// Connectionstring til db. Skal ændres senere.
public string sqlString = "server=db.golfon.dk;uid=web196132;pwd=w5nr949m92;database=web196132;";
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
venstreMenuObout();
}
}
protected void venstreMenuObout()
{
// Lav MySQL-halløj her
MySqlConnection conOver = new MySqlConnection(sqlString);
MySqlDataAdapter overMenu = new MySqlDataAdapter("SELECT * FROM Kategori WHERE Subkategori=0 ORDER BY Navn ASC", conOver);
DataSet overLevel = new DataSet();
overMenu.Fill(overLevel);
foreach (DataRow d in overLevel.Tables[0].Rows)
{
Table menuTabel = new Table();
TableRow r = new TableRow();
TableCell c1 = new TableCell();
c1.CssClass = "";
TableCell c2 = new TableCell();
c2.Text = d["Navn"].ToString();
c2.CssClass = "";
c2.BackColor = System.Drawing.Color.Salmon;
TableCell c3 = new TableCell();
c3.CssClass = "";
r.Controls.Add(c1);
r.Controls.Add(c2);
r.Controls.Add(c3);
menuTabel.Rows.Add(r);
TableRow rMenu = new TableRow();
TableCell cMenu = new TableCell();
cMenu.ColumnSpan = 3;
rMenu.Controls.Add(cMenu);
menuTabel.Rows.Add(rMenu);
PlaceHolder p = new PlaceHolder();
//Lav parent-menuen
EasyMenu menu = new EasyMenu();
menu.ID = d["Kategori"].ToString();
menu.Width = "120";
menu.Position = MenuPosition.Vertical;
menu.ShowEvent = MenuShowEvent.Always;
// css classes names for the menu and the item container
menu.CSSMenu = "ParentMenu";
menu.CSSMenuItemContainer = "ParentItemContainer";
// css classes names for MenuItems
CSSClasses MenuItemCssClasses = menu.CSSClassesCollection[menu.CSSClassesCollection.Add(new CSSClasses(typeof(OboutInc.EasyMenu_Pro.MenuItem)))];
MenuItemCssClasses.ComponentSubMenuCellOver="ParentItemSubMenuCellOver";
MenuItemCssClasses.ComponentContentCell="ParentItemContentCell";
MenuItemCssClasses.Component="ParentItem";
MenuItemCssClasses.ComponentSubMenuCell="ParentItemSubMenuCell";
MenuItemCssClasses.ComponentIconCellOver="ParentItemIconCellOver";
MenuItemCssClasses.ComponentIconCell="ParentItemIconCell";
MenuItemCssClasses.ComponentOver="ParentItemOver";
MenuItemCssClasses.ComponentContentCellOver="ParentItemContentCellOver";
// add the classes names to the collection
menu.CSSClassesCollection.Add(MenuItemCssClasses);
//Tilføj menuen vha. Obout EasyMenu og MySQL
MySqlConnection con = new MySqlConnection(sqlString);
MySqlDataAdapter katMenu = new MySqlDataAdapter("SELECT * FROM Kategori WHERE Subkategori ="+ Convert.ToInt32(d["Kategori"].ToString()), con);
DataSet over = new DataSet();
katMenu.Fill(over);
foreach(DataRow dr in over.Tables[0].Rows)
{
menu.AddItem(new OboutInc.EasyMenu_Pro.MenuItem(dr["Kategori"].ToString(),dr["Navn"].ToString(),"","","",""));
// Her tilføjes producenter, som er i kategorien
EasyMenu underMenu = new EasyMenu();
underMenu.ID = "underMenu_" + dr["Kategori"].ToString();
underMenu.ShowEvent = MenuShowEvent.MouseOver;
underMenu.AttachTo = dr["Kategori"].ToString();
underMenu.Width = "90";
underMenu.Align = MenuAlign.Left;
MySqlConnection conUnder = new MySqlConnection(sqlString);
MySqlDataAdapter katMenuUnder = new MySqlDataAdapter("SELECT DISTINCT(b.Producent),p.Pnavn FROM Bolde b, Producent p WHERE b.Producent = p.ID AND b.Kategori=" + Convert.ToInt32(dr["Kategori"].ToString()), conUnder);
DataSet under = new DataSet();
katMenuUnder.Fill(under);
foreach (DataRow dt in under.Tables[0].Rows)
{
underMenu.AddItem(new OboutInc.EasyMenu_Pro.MenuItem(dt["Producent"].ToString(), dt["Pnavn"].ToString(), "", "priser.aspx?kat=" + dr["Kategori"].ToString() + "&prod=" + dt["Producent"].ToString()));
}
underMenu.AddItem(new OboutInc.EasyMenu_Pro.MenuItem("alle", "Vælg alle", "", "priser.aspx?kat=" + dr["Kategori"].ToString()));
Page.Controls.Add(underMenu);
}
//Bind menuen til Placeholderen
p.Controls.Add(menu);
cMenu.Controls.Add(p);
venstreDiv.Controls.Add(menuTabel);
}
}
}
Jeg håber der er en, som kan hjælpe, for jeg er kørt fast, og det skal jo virke...