---
title: "Fylla en dropdownlist rekursivt"
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/125228-fylla-en-dropdownlist-rekursivt"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "jazzil"
published: "2005-03-27T20:51:27.000Z"
updated: "2005-03-28T19:44:14.000Z"
replies: 5
views: 402
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/125228-fylla-en-dropdownlist-rekursivt"
---

# Fylla en dropdownlist rekursivt

## #1 — jazzil, 2005-03-27T20:51Z

Jag håller på att bygga en prislista som projektarbete i skolan till ett företag och jag har stött på lite problem.
Det är generellt hur man fyller något rekursivt.
<http://mekk.mine.nu/dps/admin/nykat.aspx> 
(Ser skit ut i IE, inte fixat dubbla css ännu)

Så finns det en dropdownlist som man ska välja vilken kategori som den nya ligger under. 
Jag vill få det så att TFT som finns i listan ska ligga under skärmar och en bit indragen så att det tydligt syns att TFT är underkategori till Skärmar. 

EDIT:
tabellen tbl_kategorier ser ut så här.
ID\|  NAMN   \|P_ID
1 \| Skärmar \| 0
2 \| Nätverk  \| 0
3 \| TFT         \| 1

Väldigt tacksam för hjälp.

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

## #2 — m_soderlund, 2005-03-27T21:17Z

Du lagrar ju info om TFT så att man vet att det är en underkategori till Skärmar. Då kan du använda dig av if-sats och kolla om en det är en underkategori som ska skrivas ut i dropdownlistan. I så fall lägger du till en post till dropdownlistan. Här är lite pseudokod:

```
Sub show_()

        'plocka ut info ur tabellen
        Dim SQL As string = "SELECT * FROM tbl_kategorier"

        'felhantering med Try .. Catch
        Try

        'anslut till databasen & skapa ett OleDbDataReader-objekt
        Dim Cn As OleDbConnection = new OleDbConnection(CnStr)
        Dim Cm As OleDbCommand = new OleDbCommand(SQL,Cn)
            Cn.Open()
        Dim objDataReader As OleDbDataReader = Cm.ExecuteReader()

        'skapa en ny samling av listposter (option-val i dropdownlistan i default.aspx)
        Dim ddlBox As new ListItemCollection

        'lägg till text
        ddlBox.Add(new ListItem("Välj"))
        ddlBox.Add(new ListItem())

        'lägg till val i dropdownlistan
        while(objDataReader.Read())

[b]if objDataReader("p_id")>0 then
ddlBox.Add(new ListItem(">> " & objDataReader("Namn"))
else
            ddlBox.Add(new ListItem(objDataReader("Namn")))
end if[/b]

        end while

        'bind data till dropdownlistan
        ddl_list.DataSource = ddlBox
        ddl_list.DataBind()

        'stäng objekt
        objDataReader.Close()
        Cn.Close()

        'fånga felmeddelande
        Catch ex As exception
            lbl_error.Text = "Ett fel uppstod när visning av kategorier från databasen skulle ske..<br />Error: " & ex.Message
        End Try

    End Sub
```

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

## #3 — jazzil, 2005-03-27T23:21Z

Jag skrev om det till ngt sådant.

```
		private void Page_Load(object sender, System.EventArgs e)
		{
			CatList.Items.Add(new ListItem("Ingen", "0"));
			fillRec(0);
		}

		private void fillRec(int parent_id)
		{
			string SQL = "SELECT * FROM tbl_kategorier WHERE pappa_id="+parent_id;
			string ConString =  "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=****.mdb;User Id=admin;Password=;";
			OleDbConnection olCon = new OleDbConnection(ConString);
			OleDbCommand olCommand = new OleDbCommand(SQL, olCon);
			olCon.Open();
			OleDbDataReader dr = olCommand.ExecuteReader();
			
			while(dr.Read())
			{
				CatList.Items.Add(new ListItem(dr["kat_namn"].ToString(),dr["id"].ToString()));
				fillRec(Convert.ToInt32(dr["id"]));		
			}
			
			dr.Close();
			olCon.Close();
		}
```

 

Och nu sorterar den rätt .. men jag kan inte komma på hur jag ska räkna hur djupt i trädet den är så att jag kan skriva ut rätt antal "\>\>"..

Tacksam

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

## #4 — m_soderlund, 2005-03-28T16:07Z

**/r** dinohjärnan var framme.. ;)

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

## #5 — Gladh, 2005-03-28T16:10Z

> men jag kan inte komma på hur jag ska räkna hur djupt i trädet den är så att jag kan skriva ut rätt antal "\>\>"..

Det är väldigt enkelt, du skickar med en extra parameter till din fillRec() funktion som berättar djupet. Alltså i Page_Load skickar du med 0 och har sedan en paramter deep som du tar emot i din fillRec och i din while loop så skickar du med deep + 1 till nästa anrop typ så här:

```
void page_load(){
...
fillRec(0,0);
...
}
```

```
void fillRec(int parentId, int deep){
...
while(dr.Read())
{
CatList.Items.Add(new ListItem(dr["kat_namn"].ToString(),dr["id"].ToString()));
fillRec(Convert.ToInt32(dr["id"]), deep + 1);		
}
...
}
```

\- M

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

## #6 — jazzil, 2005-03-28T19:44Z

Att det var så lätt .. tack så mycket!

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

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/125228-fylla-en-dropdownlist-rekursivt
