---
title: "Fylla dropdownlist"
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/64685-fylla-dropdownlist"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "andreas_lindh"
published: "2003-01-13T15:03:42.000Z"
updated: "2003-01-13T20:38:35.000Z"
replies: 10
views: 253
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/64685-fylla-dropdownlist"
---

# Fylla dropdownlist

## #1 — andreas_lindh, 2003-01-13T15:03Z

Jag försöker fylla en dropdownlist med värden från en databas men får det inte att fungera.

```
Dim objcmd As New OleDbCommand _
                     ("SELECT lagid_a,lagid_b from matcher where id=" & m_id & "", objconn)

        Dim dr As OleDbDataReader

        objconn.Open()
        dr = objcmd.ExecuteReader
        If dr.Read() Then
            If dplLag.SelectedItem.Text = "A" Then

                Dim objcmd1 As New OleDbDataAdapter _
                            ("select * from trupper where lag_id=" & dr("lagid_a") & "", objconn)
                Dim ds1 As DataSet = New DataSet()
                objcmd1.Fill(ds1, "matchprotokoll")

                For i = 1 To ds1.Tables("matchprotokoll").Rows.Count
                    dplSpelare.Items(i).Text = ds1.Tables("matchprotokoll").Rows(0)("nummer")
                    dplSpelare.Items(i).Value = ds1.Tables("matchprotokoll").Rows(0)("id")
                Next
            Else

                Dim objcmd1 As New OleDbDataAdapter _
                            ("select * from trupper where lag_id=" & dr("lagid_b") & "", objconn)
                Dim ds1 As DataSet = New DataSet()
                objcmd1.Fill(ds1, "matchprotokoll")
                For i = 1 To ds1.Tables("matchprotokoll").Rows.Count
                    dplSpelare.Items(i).Text = ds1.Tables("matchprotokoll").Rows(0)("nummer")
                    dplSpelare.Items(i).Value = ds1.Tables("matchprotokoll").Rows(0)("id")
                Next
            End If
        End If
```

Felmeddelande

```
Exception Details: System.InvalidOperationException: There is already an open DataReader associated with this Connection which must be closed first.

Source Error: 

Line 56: 
Line 57:                 Dim ds1 As DataSet = New DataSet()
Line 58:                 objcmd1.Fill(ds1, "matchprotokoll")
Line 59:                 objconn.Close()
Line 60:                 For i = 1 To ds1.Tables("matchprotokoll").Rows.Count
 

Source File: h:\inetpub\wwwroot\cup\mphandelser.aspx.vb    Line: 58
```

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

## #2 — fredrik, 2003-01-13T15:56Z

Eftersom du har en "DataReader" öppen som jobbar med det aktuella connection-objektet kan du inte använda connection-objektet igen utan att stänga "Readern" först.

Alternativet är alltså att använda ett nytt connection-objekt, typ:

```
dim objCmd1 as new OleDBDataAdapter("SELECT * FROM table", new OleDbConnection("CONN_STR"))
```

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

## #3 — andreas_lindh, 2003-01-13T16:36Z

jag testade att göra så här

```
 Dim objcmd As New OleDbCommand _
                     ("SELECT lagid_a,lagid_b from matcher where id=" & m_id & "", objconn)

        Dim dr As OleDbDataReader

        objconn.Open()
        dr = objcmd.ExecuteReader
        If dr.Read() Then
            If dplLag.SelectedItem.Text = "A" Then

                Dim objcmd1 As New OleDbDataAdapter _
                            ("select * from trupper where lag_id=" & dr("lagid_a") & "", objconn)
                objconn.Close()
                Dim ds1 As DataSet = New DataSet()
                objcmd1.Fill(ds1, "matchprotokoll")

                For i = 1 To ds1.Tables("matchprotokoll").Rows.Count
                    dplSpelare.Items(i).Text = ds1.Tables("matchprotokoll").Rows(0)("nummer")
                    dplSpelare.Items(i).Value = ds1.Tables("matchprotokoll").Rows(0)("id")
                Next
                objconn.Open()
            Else

                Dim objcmd1 As New OleDbDataAdapter _
                            ("select * from trupper where lag_id=" & dr("lagid_b") & "", objconn)
                objconn.Close()
                Dim ds1 As DataSet = New DataSet()
                objcmd1.Fill(ds1, "matchprotokoll")
                For i = 1To ds1.Tables("matchprotokoll").Rows.Count
                    dplSpelare.Items(i).Text = ds1.Tables("matchprotokoll").Rows(0)("nummer")
                    dplSpelare.Items(i).Value = ds1.Tables("matchprotokoll").Rows(0)("id")
                Next
                objconn.Open()
            End If
        End If
```

Får ett nytt felmeddelande

```
Exception Details: System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index

Source Error: 

Line 59: 
Line 60:                 For i = 0 To ds1.Tables("matchprotokoll").Rows.Count
Line 61:                     dplSpelare.Items(i).Text = ds1.Tables("matchprotokoll").Rows(0)("nummer")
Line 62:                     dplSpelare.Items(i).Value = ds1.Tables("matchprotokoll").Rows(0)("id")
Line 63:                 Next
 

Source File: h:\inetpub\wwwroot\cup\mphandelser.aspx.vb    Line: 61
```

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

## #4 — juventus1, 2003-01-13T17:34Z

Koden du postade stämmer inte med felmeddelandet. Jag hittar iaf inte någon loop där du börjar med i = 0. Men koden som du har i felmeddelandet kan du fixa så här:

```
For i = 0 To ds1.Tables("matchprotokoll").Rows.Count - 1
dplSpelare.Items(i).Text = ds1.Tables("matchprotokoll").Rows(0)("nummer")
dplSpelare.Items(i).Value = ds1.Tables("matchprotokoll").Rows(0)("id")
Next
```

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

## #5 — andreas_lindh, 2003-01-13T18:22Z

tyvärr fungerade inte det heller. Det blir samma fel.

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

## #6 — juventus1, 2003-01-13T18:27Z

Vilka är rad 59-63? Jag kan inte hitta någon kod som motsvarar den i felmeddelandet. (se mitt förra svar)

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

## #7 — andreas_lindh, 2003-01-13T18:33Z

```
For i = 0 To ds1.Tables("matchprotokoll").Rows.Count - 1
                    dplSpelare.Items(i).Text = ds1.Tables("matchprotokoll").Rows(0)("nummer")
                    dplSpelare.Items(i).Value = ds1.Tables("matchprotokoll").Rows(0)("id")
                Next
```

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

## #8 — juventus1, 2003-01-13T20:04Z

Men den koden finns inte med i det stora stycket du postade. Hursomhelst borde du loopa till efter antalet element i dblSpelare och inte i ds1. Jag ser inte vad dblSpelare är får något, men typ så här:

```
for i = 0 to dplSpelare.Items.Count - 1
   dplSpelare.Items(i).Text = ds1.Tables("matchprotokoll").Rows(0)("nummer")
   dplSpelare.Items(i).Value = ds1.Tables("matchprotokoll").Rows(0)("id")
next
```

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

## #9 — andreas_lindh, 2003-01-13T20:15Z

Då blir det inga fel men det blir inte som jag vill ha det.

dplspelare är dropdownlisten den är deklarerad så här

```
Public dplSpelare As DropDownList
```

Sen har jag det här i aspx filen

```
<asp:dropdownlist id="dplSpelare" runat="server" width="35">
									<asp:listitem></asp:listitem>
								</asp:dropdownlist>
```

Jag vill att det ska bli lika många laternativ i dropdownlisten som det finns poster i databasen

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

## #10 — juventus1, 2003-01-13T20:31Z

Ok, då är jag med på det hela. Jag tror inte att du ens behöver loopa för att fixa det. Jag gör ett försök:

```
dplSpelare.DataSource = dr
dblSpelare.DataBind()
```

Sedan i din dropdownlist sätter du DataTextField="nummer"
DataValueField="id". Om det inte fungerar så läs lite här: <http://www.dotnet247.com/247reference/a.aspx?u=http://www.orcsweb.com/articles/dropsql.asp>

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

## #11 — andreas_lindh, 2003-01-13T20:38Z

Tack. Nu fungerar det perfekt :)

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

---

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