---
title: "Dunamiskt skriva till Labeler."
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/151151-dunamiskt-skriva-till-labeler"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "saw"
published: "2006-09-10T13:19:57.000Z"
updated: "2006-09-10T21:33:43.000Z"
replies: 11
views: 565
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/151151-dunamiskt-skriva-till-labeler"
---

# Dunamiskt skriva till Labeler.

## #1 — saw, 2006-09-10T13:19Z

Jag vill först tackaför den hjälp jag fick med "Problem med att översätta ifrån VB-script till Asp.net 2.0 C# ", och jag vill fortfarande refferera till den tråden.
Nu tar jag ju fram min sql dynamiskt och via adapter fyller labelerna:

```
Lfraga_1.Text = "<b>Fråga 1:</b><br/> " + ds.Tables["Quize"].Rows[0]
["Fraga"].ToString();
Lfraga_2.Text = "<b>Fråga 2:</b><br/> " + ds.Tables["Quize"].Rows[1]
["Fraga"].ToString();
```

osv. Det ser ju inte så praktiskt ut, och jag skall också ge mig på att fylla
upp texter till radioknappar, så jag tänkte såhär:

```
for (int i = 1; i < 11; i++)
 {
  Label myLabel = new Label(Lfraga_ + i);
  ((Label)FindControl(myLabel)).Text = "<b>Fråga " + i + ":</b><br/> " + 
ds.Tables["Quize"].Rows[i -1]["Fraga"].ToString();
               
  }
```

Nu får jag en massa fel:

```
Error	1	Namnet Lfraga_ finns inte i den aktuella kontexten
	F:\Inetpub\wwwroot\ASP_Net-Test\Saw-
Asp.net\Quize\Quize.aspx.cs	112	43	F:\...\Saw-Asp.net\
Error	2	Den överlagrade metod som bäst matchar 
System.Web.UI.Control.FindControl(string) har några ogiltiga argument
	F:\Inetpub\wwwroot\ASP_Net-Test\Saw-
Asp.net\Quize\Quize.aspx.cs	113	25	F:\...\Saw-Asp.net\
Error	3	Argumentet 1: kan inte konverteras från 
System.Web.UI.WebControls.Label till string
	F:\Inetpub\wwwroot\ASP_Net-Test\Saw-
Asp.net\Quize\Quize.aspx.cs	113	37	F:\...\Saw-Asp.net\
```

Skall man inte kunna göra så här???

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

## #2 — emission, 2006-09-10T13:25Z

FindControl använder man för att hitta en en instans av en kontroll, när man bara vet namnet. I ditt fall så har du ju redan instansen!

```
for (int i = 1; i < 11; i++)
 {
  Label myLabel = new Label(Lfraga_ + i);
//myLabel är instansen!!
  myLabel.Text = "<b>Fråga " + i + ":</b><br/> " + ds.Tables["Quize"].Rows[i -1]["Fraga"].ToString();

//Här måste du lägga till myLabel till sidan eller någon annan kontroll. t.ex.
//this.Controls.Add(myLabel);
               
}
```

Du bör dock använda en list-kontroll av något slag i stället för att bygga upp kontroller dynamiskt.

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

## #3 — saw, 2006-09-10T14:23Z

Tack för svar.
Jag är nog lite för rädd för att laborera med List, har äldrig gjort det själv,
utan fått de tips som jag använder mig av.

Hursomhelst, ditt förslag verkar ju bra, men jag får ett error:

```
Label myLabel = new Label("Lfraga_" + i.ToString());
'och errot
Error	1	Ingen överlagring för metoden Label tar 1 argument
	F:\Inetpub\wwwroot\ASP_Net-Test\Saw-
Asp.net\Quize\Quize.aspx.cs	156	33	F:\...\Saw-Asp.net\
'om jag inte har fnuttar runt lFraga så får jag error:
Error	1	Namnet Lfraga_ finns inte i den aktuella kontexten
	F:\Inetpub\wwwroot\ASP_Net-Test\Saw-
Asp.net\Quize\Quize.aspx.cs	156	43	F:\...\Saw-Asp.net\
```

Visst skall man väll kunna göra så här?

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

## #4 — emission, 2006-09-10T14:41Z

Missade den delen...

Om du använder Visual Web Developer eller Visual Studio, så borde det synas tämligen snabbt var detta ligger.

Label tar inga argument i konstruktorn. Sätt värdet med .Text-egenskapen i stället.

> **saw skrev:**
>
> Jag är nog lite för rädd för att laborera med List, har äldrig gjort det själv,
> utan fått de tips som jag använder mig av.

Med list-kontroll syftade jag på Repeater, GridView, DataList el. likn.

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

## #5 — saw, 2006-09-10T16:08Z

Då ser det ut som om jag går på pumpen.
om jag gör så här:

```
 Label myLabel = new Label();
                //myLabel är instansen!!
                myLabel.Text = "<b>Fråga " + i + ":<p></p> " + ds.Tables
["Quize"].Rows[i - 1]["Fraga"].ToString();

                //Här måste du lägga till myLabel till sidan eller någon annan kontroll. t.ex.
               this.Controls.Add(myLabel);
```

Så har jag inga error, men texten skrivs inte ut i de befinntliga labelerna.
Mitt stora problem ligger i :

```
new Label(Lfraga_ + i.ToString())
```

och mycket riktigt, VS visar på att det är ett fel här.
Den tror att labellen skall heta Lfraga\_, men den skall ju heta Lfraga_1 t ex.
Eftersom jag jobbar i en wizard, så ville jag inte ha någon repeater el dyl.
Är detta olösligt?
Måste jag i såfall hårdkoda allt?

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

## #6 — emission, 2006-09-10T16:20Z

Jaha, du har färdiga Labels. Då ska du inte skapa nya med "new", och inte heller lägga till dem.

```
Label myLabel =FindControl("Lfraga_" + i.ToString()) as Label;
```

Jag vet inte hur din sida ska se ut, men jag tror att en Repeter skulle sitta fint, wizard eller ej.

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

## #7 — saw, 2006-09-10T16:33Z

Jag har full förståelse om du tröttna på mig, men jag springer på patrull
hela tiden:

```
Label myLabel = (Label)FindControl("Lfraga_" + i.ToString());
           myLabel.Text = "<b>Fråga " + i + ":<p></p> " + ds.Tables
["Quize"].Rows[i - 1]["Fraga"].ToString();
```

Och så får jag error:

```
"Nullreferenceexeption was unhandled by user code" (Detta är titlen)
Objektreferensen har inte angetts till en instans av ett objekt.
```

Som du ser, så var jag tvungen att ändra på lite eftersom det är i C# jag 
kodar.

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

## #8 — emission, 2006-09-10T16:46Z

Felet beror på att Label-kontrollen inte hittas eller ds.Tables\["Quize"\].Rows\[i - 1\]\["Fraga"\] inte kan hittas. Något är null, med andra ord.

> **saw skrev:**
>
> Som du ser, så var jag tvungen att ändra på lite eftersom det är i C# jag 
> kodar.

Det gör jag också, och mitt kodexempel var C#.

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

## #9 — saw, 2006-09-10T17:06Z

as Label; är det inte VB.net?

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

## #10 — Dino, 2006-09-10T17:39Z

.aspx

```
<asp:repeater id="repQuiz" runat="server">
   <itemtemplate>
      <asp:label id="lbQ" runat=server" />
   </itemtemplate>
</asp:repeater>
```

.cs

```
protected void Page_Load(object sender, EventArgs e)
{
   if(!IsPostBack)
      Bind();
}

private void Bind()
{
   //GetDataset
   DataSet ds1 = new DataSet();
   //Fill dataset any way you want

   repQuiz.DataSource = ds1;
   repQuiz.DataBind();
}

protected void repQuiz_itemdatabound(object sender, RepeaterItemEventArgs e)
{
   if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
   {
      DataRowView drv = (DataRowView)e.Item.DataItem;

      string s = string.Format("Fråga {0}<br/><br/>{1}", (e.Item.ItemIndex + 1).ToString(), drv.Row["Fraga"].ToString());
      ((Label)e.Item.FindControl("lbQ")).Text = s;
   }
}
```

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

## #11 — saw, 2006-09-10T21:21Z

Tack för detta Dino, jag skall kolla det.

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

## #12 — emission, 2006-09-10T21:33Z

Bra förslag, Dino!

Beroende på hur sidan ska se ut så kan man tänka sig att man kan göra allt i aspx-filen, utan att behöva någon kod i ItemDataBound.

```
        <asp:Repeater ID="repQuiz" runat="server">
        <ItemTemplate>
            Fråga <%#Eval("frågeNummer") %><br/><br/>
            <%#Eval("fråga") %>
        </ItemTemplate>
        </asp:Repeater>
```

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

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/151151-dunamiskt-skriva-till-labeler
