---
title: "Binda data till dropdown i datagrid"
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/139718-binda-data-till-dropdown-i-datagrid"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "trexter"
published: "2005-12-21T21:28:15.000Z"
updated: "2005-12-22T13:36:56.000Z"
replies: 12
views: 576
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/139718-binda-data-till-dropdown-i-datagrid"
---

# Binda data till dropdown i datagrid

## #1 — trexter, 2005-12-21T21:28Z

Jag har denna funktionen och vill alltså lägga till data från databasen till två dropdown-listor. Den ena ligger utanför en datagrid (och här fungerar det). Den andra ligger inuti. Hur ska jag göra för att "asp:n" ska hitta kontrollen? 

```
                <EditItemTemplate>
                    <asp:DropDownList ID="edit_droptillverkare" runat="server"></asp:DropDownList>
                </EditItemTemplate>
```

```
      public void PopulateDrops()
      {
        myConnection.Open();
		SqlCommand myCommand = new SqlCommand("select TillverkareID, TillverkareNamn from Tillverkare where TillverkareAnvID = @TillverkareAnvID", myConnection);
        myCommand.Parameters.Add("@TillverkareAnvID", SqlDbType.Int, 10).Value = UserIdentityName[1];

		SqlDataReader dr = myCommand.ExecuteReader();
		if (dr.HasRows) {
            droptillverkare.DataSource = dr;
            droptillverkare.DataTextField = "TillverkareNamn";
            droptillverkare.DataValueField = "TillverkareID";
            droptillverkare.DataBind();
            
            [b]edit_droptillverkare.DataSource = dr;
            edit_droptillverkare.DataTextField = "TillverkareNamn";
            edit_droptillverkare.DataValueField = "TillverkareID";
            edit_droptillverkare.DataBind();       [/b]   
        }

        dr.Close();
      }
```

 :)

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

## #2 — Croolie, 2005-12-22T09:22Z

Det du måste göra är att själv ange vilka columns du vill visa i datagriden. Där du måste själv ange att det skall visas en dropdownlist. Det gör du enligt följande:

```
<asp:datagrid>
   <Columns>
      <asp:TemplateColumn>
         <ItemTemplate>
            <asp:DropDownList>
         </ItemTemplate>
      </asp:TemplateColumn>
   </Columns>
</asp:datagrid>
```

Sedan måste du ange DataSource till dropdownlist 

```
DataSource="<%# fillDropDown() %>
```

 där du tex har en metod som returnerar ett dataset med den data du hämtat ifrån databasen... Hoppas du förstod detta :)

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

## #3 — trexter, 2005-12-22T09:35Z

Jag ser ingen principiell skillnad mellan sättet du gjort på och så jag gjorde?!   :q
edit. Eller jo, det gör jag visst då. Om man gör ändringen i .aspx-filen... ;)

Jag förstår hur du menar men hur ska jag göra för att skicka med dels värden till dropdownen & även id-nummer som skalla "indexera" värdena?

 :)

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

## #4 — trexter, 2005-12-22T09:46Z

MSDN hade ett fint exempel på
<http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemwebuiwebcontrolsdropdownlistclasstopic.asp>
tror det ska lösa sig

 :)

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

## #5 — DavidB, 2005-12-22T09:59Z

Har inte testat koden själv men det borde fungera.

```
<asp:datagrid onitemdatabound="itemDataBound" runat="server">
	<asp:templatecolumn>
		<itemtemplate>
			<asp:dropdownlist id="dd" runat="server" />
		</itemtemplate>
	</asp:templatecolumn>
</asp:datagrid>

private void itemDataBound(object sender, DataGridItemEventArgs e){
	DropDownList ddl;

	if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem){
		ddl = (DropDownList)e.Item.Cells[0].FindControl("dd");
		
		// Här lägger du kod för att fylla DropDownListen
		// eller vad det är du vill göra med den
	}
}
```

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

## #6 — trexter, 2005-12-22T10:53Z

DavidB, bestämde mig för att försöka använda din lösning men får inte riktigt rätt på det. :)

```
      public void itemDataBound(object sender, DataGridItemEventArgs e)
      {
          DropDownList dd1;

          if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
          {
              dd1 = (DropDownList)e.Item.Cells[0].FindControl("edit_droptillverkare");

              [b]dd1.DataSource = DropsData();[/b]
              dd1.DataTextField = "DText";
              dd1.DataValueField = "DValue";

              dd1.DataBind();

              dd1.SelectedIndex = 0;
          }
      }
```

" Exception Details: System.NullReferenceException: Object reference not set to an instance of an object."

DropsData() returnerar en DataView (denna funktion fungerar eftersom den används vid ett annat tillfälle också).

```
      ICollection DropsData()
      {
        ...
        DataView dv = new DataView(dt);
        return dv;
      }
```

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

## #7 — DavidB, 2005-12-22T10:55Z

Har du fler kolumner i DataGriden?

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

## #8 — trexter, 2005-12-22T10:56Z

```
          <ASP:DataGrid id="MyDataGrid" runat="server"
            Width="700"
            BackColor="#ccccff"
            BorderColor="black"
            ShowFooter="false"
            CellPadding=3
            CellSpacing="0"
            Font-Name="Verdana"
            Font-Size="8pt"
            HeaderStyle-BackColor="#aaaadd"
            
            OnEditCommand="MyDataGrid_Edit"
            OnCancelCommand="MyDataGrid_Cancel"
            OnUpdateCommand="MyDataGrid_Update"
            OnDeleteCommand="MyDataGrid_Delete"
            DataKeyField="ProduktID"
            AutoGenerateColumns="false"
            OnItemDataBound="itemDataBound" >
            
            
          <Columns>
                <asp:ButtonColumn Text="Ta bort" CommandName="Delete"/>
                <ASP:EditCommandColumn EditText="Editera" CancelText="Avbryt" UpdateText="Uppdatera" HeaderStyle-Wrap=false />
                <ASP:BoundColumn HeaderText="ID" DataField="ProduktID" ReadOnly=true />
               
                <ASP:TemplateColumn HeaderText="Namn" SortExpression="ID">
                <ItemTemplate>
                    <asp:Label runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "ProduktNamn") %>'/>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:TextBox runat="server" id="edit_namn" Text='<%# DataBinder.Eval(Container.DataItem, "ProduktNamn") %>'/>
                </EditItemTemplate>
                </asp:TemplateColumn>
                
                <ASP:TemplateColumn HeaderText="Tillverkare" SortExpression="IDd">
                <ItemTemplate>
                    <asp:Label runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "TillverkareNamn") %>'/>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:DropDownList ID="edit_droptillverkare" runat="server"></asp:DropDownList>
                </EditItemTemplate>
                </asp:TemplateColumn>
                        
          </Columns>        
        </ASP:DataGrid>
```

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

## #9 — DavidB, 2005-12-22T11:23Z

Felet beror på att den inte hittar någon dropdownlist i den angivna kolumnen.

Du måste ange vilken kolumn från vänster med början på 0 det gällen, i ditt fall 4.

```
(DropDownList)e.Item.Cells[[b]4[/b]].FindControl("edit
```

Fast nu när du har ItemTemplates och EditItemTemplates blev jag lite osäker. Du borde få lägga in en if-sats som kollar att du kör "Edit". 
Skulle kunna tänka mig att det kan se ut nåt liknande detta:

```
public void itemDataBound(object sender, DataGridItemEventArgs e){
	if(e.Item.ItemIndex == MyDataGrid.EditItemIndex){
		if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem){
			DropDownList dd1 = (DropDownList)e.Item.Cells[4].FindControl("edit_droptillverkare");

			dd1.DataSource = DropsData();
			dd1.DataTextField = "DText";
			dd1.DataValueField = "DValue";

			dd1.DataBind();

			dd1.SelectedIndex = 0;
		}
	}
}
```

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

## #10 — trexter, 2005-12-22T11:40Z

Utan den extra if-satsen - samma felmeddelande som innan.
Med if-satsen - ingen data läggs till i dropdown-lsitan,.

 :)

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

## #11 — trexter, 2005-12-22T12:25Z

Jag får alltså
"Exception Details: System.NullReferenceException: Object reference not set to an instance of an object."

Något som kan vara fel i
dd1 = (DropDownList)e.Item.Cells\[4\].FindControl("edit_droptillverkare");
?

edit_droptillverkare är namnet på dropdwon:en. Testade att ge namnet på DataGrid:en också (kan inte denna syntaxen) men det fungerade inte heller...

Hjälp!!    :e

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

## #12 — DavidB, 2005-12-22T12:34Z

Jag har suttit och testat lite och får samma fel också, lite konstigt för det känns rätt :)

Fast en annan lösning kanske är att du skapar DropDownListen i din CodeBehind?

```
public void itemDataBound(object sender, DataGridItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        DataTable dt = new DataTable();
        // ...
        
        DropDownList ddl = new DropDownList();
        ddl.DataSource = dt;
        ddl.DataBind();

        e.Item.Cells[4].Controls.Add(ddl);
    }
}
```

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

## #13 — trexter, 2005-12-22T13:36Z

Det fungerar inte heller. Man ska inte köra det hela i en annan metod då, typ MyDataGrid_Edit?

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

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/139718-binda-data-till-dropdown-i-datagrid
