webForumDet fria alternativet

Dynamisk meny

.NET

23 svar · 869 visningar · startad av Web-Tor · sida 2 av 2

Frågan, av Web-Tor

Det har blivit dags för mig att bygga den här menyn. Databasen som jag utgår ifrån innehåller följande fält. ID \- sidans ID (t.ex. 1) Name \- det som ska stå i länken (t.ex. "Kontakt") Section \- anger vilken sektion sidan tillhör (t.ex. 1. "Kontakt", "Test 1" och "Test 2" är en sektion t.ex.) Level \- anger om det är nivå 1

Läs frågan i sin helhet →
Medlem sedan nov. 200013 890 inlägg
#21

Klart att det går att lösa, frågan är bara hur

Jag har hört att allt går att lösa. :e
Med den här loopen får jag ju ut alla noder i databasen (och ändra utseende på länken på den sidan man är):

for (int i=0; i < Source.Count; i++)
{
	HyperLink link = new HyperLink();
	MenuPH.Controls.Add(link);
	link.Text = Source[i]["colName"].ToString();
	link.NavigateUrl = "../default1.aspx?node=" + Source[i]["colID"].ToString();

	if (Convert.ToInt16(Source[i]["colID"]) == _node)
		link.CssClass = "menu1-on";
	else
		link.CssClass = "menu1";

  Literal literal = new Literal();
	literal.Text = "<br />\n";
	MenuPH.Controls.Add(literal);
}

Nu är ju grejen att det är ju inte förrän jag klickar på "Kontakt" som "Test 1" och "Test 2" ska visas. Hur får jag till det?

Medlem sedan juni 20011 732 inlägg
#22

En idé som jag fick bara... skulle du inte kunna hämta rätt menyalternativ direkt i din sql-sats? Du vet ju vad som ska hämtas ut om du skickar in ett id (alla nivå 1 plus alla nivå 2 i den valda sektionen). Sedan i din loop sätter du olika styles på dem beroende på om det är ett huvud- eller undermenyalternativ med en if-sats. Då behöver du bara en loop. Är ingen nod vald hämtar du bara dina nivå1-länkar. Då kan du använda samma loop till båda...

Medlem sedan nov. 200013 890 inlägg
#23

Hmmm, jag får sitta hemma på kammaren och fundera på det här ett tag till...
Kom gärna med fler fina förslag. :)

Medlem sedan nov. 200013 890 inlägg
#24

Då var det löst! Jag gjorde som du föreslog NETwork och så här blev resultatet:

private void Page_Load(object sender, System.EventArgs e)
{
	//***   Hämtar sidans ID   ***
	int _node = Convert.ToInt16(Request.QueryString["node"]);
	if (_node <= 0)
		_node = 1;

	//***   Sektion   ***
	Database db1 = new Database();
	OleDbDataReader myReader = db1.GetDataReader("SELECT colSection FROM tblContent WHERE colID=" + _node);
	if (myReader.Read())
	{
		_section = myReader["colSection"].ToString();
	}
	myReader.Close();

	//***   Hämtar menyn   ***
	Database db = new Database();
	DataSet ds = db.GetDataSet("SELECT colID, colName, colLevel, colSection, colTemplate FROM tblContent WHERE colLevel=1 OR colSection=" + _section + " ORDER BY colSection, colLevel, colSortOrder");
	DataView Source = ds.Tables[0].DefaultView;

	for (int i=0; i < Source.Count; i++)
	{
		int pageID = Convert.ToInt16(Source[i]["colID"]);

		HyperLink link = new HyperLink();
		phMenu.Controls.Add(link);
		link.NavigateUrl = "../" + Source[i]["colTemplate"].ToString() +"?node=" + Source[i]["colID"].ToString();
		link.Text = Source[i]["colName"].ToString();

		//*** NIVÅ 1
		if (Source[i]["colLevel"].ToString() == "1")
		{
			if (pageID == _node)
				link.Text += "<img src=\"grafik/menu1-on.gif\" alt=\"\">";
			else if (pageID != _node && _section == Source[i]["colSection"].ToString())
				link.Text += "<img src=\"grafik/menu1-under.gif\" alt=\"\">";
			else
				link.Text += "<img src=\"grafik/menu1.gif\" alt=\"\">";

			link.CssClass = (pageID == _node) ?  "menu1-on" : "menu1";
				
		}

		//*** NIVÅ 2
		else if (Source[i]["colLevel"].ToString() == "2")
		{
			if (pageID == _node)
				link.Text += "<img src=\"grafik/menu2-on.gif\" alt=\"\">";
			else
				link.Text += "<img src=\"grafik/menu2.gif\" alt=\"\">";

			link.CssClass = (pageID == _node) ?  "menu2-on" : "menu2";
		}

		Literal literal = new Literal(); //** Ny rad efter varje länk
		literal.Text = "<br />\n";
		phMenu.Controls.Add(literal);
	}
}

Man kan säkert snygga till koden men det här får duga så länge. ;)

260 ms totalt · 4 externa anrop · v20260731065814-full.2f471f9e
119 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)