webForumDet fria alternativet

menykontroll + joe celko

.NET

4 svar · 338 visningar · startad av doggelito

Medlem sedan juni 20003 076 inlägg
Frågan#1

Tjaba!

Nån som meckat ihop en meny gjord på 2.0:s menu control med ett celkoträd som datasource?
Nån som har koll på om det går över huvud taget?

Medlem sedan juni 20003 076 inlägg
#2

Har börjat knåpa ihop lite kod men fattar inte riktigt hur menykontrollen funkar. Hur bestämmer man att ett menyval är undermeny till sin parentmeny?
(nu är if-taggarna lika så allt loopas ut på samma rad, dvs. alla menyval är huvudmenyval)
Jag la med lite dummydata, allt hämtas egentligen från databas.
Hoppas nån förstår vad jag är ute efter! :)
meny.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Menu.aspx.cs" Inherits="Menu" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:Menu ID="PublicMenu" runat="server"
        Orientation="Horizontal">
    </asp:Menu>
    </div>
    </form>
</body>
</html>

meny.aspx.cb

using System;
using System.Data;
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;

public partial class Menu : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        int Y = 0;

        DataTable table = new DataTable();
        DataColumn column;
        DataRow row;

        column = new DataColumn();
        column.DataType = System.Type.GetType("System.String");
        column.ColumnName = "Menuname";
        column.AutoIncrement = false;
        column.Caption = "Menuname";
        column.ReadOnly = false;
        column.Unique = false;
        table.Columns.Add(column);

        column = new DataColumn();
        column.DataType = System.Type.GetType("System.Int32");
        column.ColumnName = "Y";
        column.AutoIncrement = false;
        column.Caption = "Y";
        column.ReadOnly = false;
        column.Unique = false;
        table.Columns.Add(column);

        row = table.NewRow();
        row["Menuname"] = "Meny 1";
        row["Y"] = "2";
        table.Rows.Add(row);
        row = table.NewRow();
        row["Menuname"] = "Meny 2";
        row["Y"] = "2";
        table.Rows.Add(row);
        row = table.NewRow();
        row["Menuname"] = "Meny 2 Undermenu 1";
        row["Y"] = "3";
        table.Rows.Add(row);
        row = table.NewRow();
        row["Menuname"] = "Meny 3";
        row["Y"] = "2";
        table.Rows.Add(row);

        foreach (DataRow rows in table.Rows)
        {
            MenuItem menuItem;
[b]
            //child till föreg. menyval
            if ((int)rows["Y"] > Y)
            {
                menuItem = new MenuItem((string)rows["Menuname"]);
                PublicMenu.Items.Add(menuItem);
            }
            else
                //ej child tll föreg. menyval
                if ((int)rows["Y"] < Y)
                {
                    menuItem = new MenuItem((string)rows["Menuname"]);
                    PublicMenu.Items.Add(menuItem);
                }

                //samma nivå som föreg. menyval
                else
                {
                    menuItem = new MenuItem((string)rows["Menuname"]);
                    PublicMenu.Items.Add(menuItem);
                }
[/b]
            Y = (int)rows["Y"];

        }
        PublicMenu.DataBind();
    }
}

tänkt resultat (översatt i xml):

<?xml version="1.0" encoding="utf-8" ?>
<menus>
  <menu name="Meny 1"></menu>
  <menu name="Meny 2">
    <menu name="Meny 2 Undermeny 1"></menu>
  </menu>
  <menu name="Meny 3"></menu>
</menus>
Medlem sedan dec. 19996 721 inlägg
#3

Du måste ha något i din data som anger att undermenyn tillhör övermenyn. Som det är nu verkar ingen sådan information finnas, eller har du skrivit fel "Y" i ditt exempel?

Medlem sedan juni 20003 076 inlägg
#4

Ops! Sorry, nu är Y:na rätt. :)

Medlem sedan juni 20003 076 inlägg
#5

Fixat!

Jag fick bygga om min SP så att varje menyval fick ett föräldrarID, då gick det att binda mot menykomponenten. :)

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