Hur gör man för att lägga till en Textbox i en tabell genom codebehind Har du kollat så den verkligen hittar din control? Det är ingen TabelCell du har utan en HTMLTableCell. Ibland ser man inte skogen för alla träden... :-) ah problemet var att jag hade gjort en TableCell istället för en HtmlTableCell När du lägger till kontroller dynamiskt så måste du lägga till varje kontroll vid varje postback. Så se till att spara undan dina dina tilllagda kontroller i tex ett Cache objekt eller i en session. I tex Page_Load lägger du till de kontroller som du tidigare har adderat till tabellen. För att lägga en kontroll under en annat så kan du tex använda dig av en enkel <br>:lägg till control i runtime
Jag har en tabell.
<code>
<TABLE id="Table1" style="Z-INDEX: 119; LEFT: 80px; POSITION: absolute; TOP: 344px" cellSpacing="1" cellPadding="1" width="300" border="1">
<TR>
<TD id="myTD" runat="server"></TD>
<TD></TD>
</TR>
<TABLE>
</code>
nu vill jag kunna lägga in en textbox i myTD genom codebehind. Jag försökte så här
<code>
TableCell myTD = (TableCell)FindControl("myTD");
TextBox a = new TextBox();
myTD.control.add(a);
</code>
felet jag får är
Specified cast is not valid.
någon som kan hjälpa migSv: lägg till control i runtime
Ta en getType på myTD och se om det stämmer.
Sedan skall du använda controls.add...
<code>
TableCell myTD = (TableCell)FindControl("myTD");
if(.... )
{
TextBox a = new TextBox();
myTD.controls.add(a);
}
</code>
Detta bör fungera, brukar lägga till en if runt för att försäkra mig om att saker och ting finns som jag sökt efter, detta i fall man vill eller kommer att öka dynamiken ännumera. Nu kör du en FindControl och då är det att rekomendera if satsen...
Om du vet om att kontrollen redan finns behöver du inte söka efter den utan lägga till din control med en gång. OBS! Se bara till så du deklarerat den i din codebehind om du kör med det.
<code>
myTD.Controls.Add(new TextBox());
</code>
Mvh JohanSv: lägg till control i runtime
Ändra:
(TableCell)FindControl("myTD");
till:
(HtmlTableCell)FindControl("myTD");
/Fredrik Normén NSQUARED2
http://www.nsquared2.netSv: lägg till control i runtime
När du gör en FindControl så letar du efter något, med det menas att du egentligen inte är helt säker på om saken du letar efter finns. I ditt fall vet du att den finns men som en regel kan du lägga en if sats och koll om du fått tag i rätt kontroll genom att kolla dess typ. Inget måste men kan rekomenderas.
Du kan kolla om det är rätt typ genom att skriva:
<code>
if(myTd is HtmlTabelCell)
//eller
if(myTd.GetType == "System........HtmlTabelCell")
</code>
Som sagt så är det upp till dig själv om du vill göra denna kontrol. Inget måste.
Mvh JohanSv: lägg till control i runtime
om jag kör denna koden så läggs en textbox till. Men om jag klickar på den igen så läggs ju inte en ny till. Hur ska jag göra för att den ska fortsätta att lägga till textboxar när man klickar och kan man på något sätt få dem att byta rad <br> så att de inte kommer på längden, utan lägger sig under varandra i tabellen.
<code>
private void Button3_Click(object sender, System.EventArgs e)
{
TextBox a = new TextBox();
HtmlTableCell myTD = (HtmlTableCell)FindControl("myTD");
myTD.Controls.Add(a);
}
</code>Sv: lägg till control i runtime
<code>
TextBox a = new TextBox();
HtmlTableCell myTD = (HtmlTableCell)FindControl("myTD");
myTD.Controls.Add(a);
myTD.Controls.Add(new LiteralControl("<br>"));
</code>
/Fredrik Normén NSQUARED2
http://www.nsquared2.net