Web-TorMedlem sedan nov. 200013 890 inlägg
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?
NETworkMedlem sedan juni 20011 732 inläggEn 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...
Web-TorMedlem sedan nov. 200013 890 inläggHmmm, jag får sitta hemma på kammaren och fundera på det här ett tag till...
Kom gärna med fler fina förslag. :)
Web-TorMedlem sedan nov. 200013 890 inläggDå 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. ;)