---
title: "menykontroll + joe celko"
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/150268-menykontroll-joe-celko"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "doggelito"
published: "2006-08-18T07:17:35.000Z"
updated: "2006-08-21T09:46:52.000Z"
replies: 4
views: 347
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/dotnet/150268-menykontroll-joe-celko"
---

# menykontroll + joe celko

## #1 — doggelito, 2006-08-18T07:17Z

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?

Permalänk: https://www.webforum.nu/p/150268

## #2 — doggelito, 2006-08-18T13:06Z

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>
```

Permalänk: https://www.webforum.nu/p/1853543

## #3 — emission, 2006-08-18T14:25Z

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?

Permalänk: https://www.webforum.nu/p/1853558

## #4 — doggelito, 2006-08-21T05:43Z

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

Permalänk: https://www.webforum.nu/p/1854183

## #5 — doggelito, 2006-08-21T09:46Z

Fixat!

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

Permalänk: https://www.webforum.nu/p/1854253

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/150268-menykontroll-joe-celko
