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:
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\
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.
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\
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?