Hur gör jag för att på ett enkelt sätt skapa ett dynamiskt formulär mha ett enkelt knapp tryck... Enklast är väl att slänga in kontroller i en Panel (renderar som div) hmm.. men jag vill sen att det formuläret som "skapas" ska ha en knapp som tar fram ett nytt formulär Något i stil med följande (på ett ungefär) En följdfråga: I init är ett bra ställe att skapa alla kontroller. Se till att alla dina dynamiska saker skapas där. Sedan kan du använda dem som vanligt. Om jag har nedanstående, hur skall jag då plocka fram värdet från dom olika textrutorna? Du måste ju spara referenser till textrutorna någonstans, t.ex. i en lista. Skapa en lista som du lägger dem i också. Sedan kan du komma åt dem ifrån knappen. Efter som jag är helt ny vad det gäller asp.net och C# (gammal asp'are som vill förnya sig) så skulle jag bli mycket glad över ett kort kodexempel. Här finns ett bra exempel Jag skall skapa ett frågeformulär (baserat på kategorier) som hämtar frågorna från SQL, och mitt problem är att det är aldrig samma antal frågor per kategori. Alltså kan jag inte skapa ett antal gömda kontroller som jag kan välja att visa. För att det ska funka måste du manuellt i kod hålla reda på dina dynamiska kontrollers tillstånd, återskapa dem och sina resp tillstånd vid Postback, t.ex genom att lagra det i Viewstate.. som sagt exempel på detta finns här. Typ något i stil med:Skapa dynamiska formulär
Formuläret ska ha text rutor och två st gridview's
Hoppas nån förstår va jag menar
/DavidSv: Skapa dynamiska formulär
och sätta Visible=False, vid knapptryck sätter du Visible=TrueSv:Skapa dynamiska formulär
det fungerar så här: man har ett formulär som används för att lägga till en ny produkt, produkten i sin tur ska kunna innehålla produkter, o den produkten ska kunna innehålla produkter...
tex.. man väljer att skapa en bil, man vill sen lägga till motor o sen i motorn en cylinder..
problemet är ju att man aldrig vet hur många formulär som behövs utan det kan ju vara allt från 1 till 1000
förstår ni?
/DavidSv: Skapa dynamiska formulär
Panel p;
p = new Panel();
TextBox tb;
tb = new TextBox();
p.Controls.Add(tb);
GridView gv;
gv = new GridView();
p.Controls.Add(gv);
this.Controls.Add(p);
Sv:Skapa dynamiska formulär
Hur kan jag använda värdet från en controll skapad på detta sätt?
Säg att jag skapar en textbox med ID=textbox och en knapp, hur skall jag referera till textbox.text när jag klickar på knappen.
Tex:
string strMydata;
strMydata = textbox.text;
Detta funkar inte eftersom det inte finns någon controll som heter textbox, förrän .net skapat den.
/MickeSv: Skapa dynamiska formulär
Sv:Skapa dynamiska formulär
protected void Page_Load(object sender, EventArgs e)
{
Panel p = new Panel();
int rowCount;
rowCount = ds2.Tables[0].Rows.Count;
for (int i = 0; i < rowCount; i++)
{
// Skapar en textruta som skall innehålla svaret
TextBox textBox = new TextBox();
textBox.Text = "";
textBox.ID = i;
p.Controls.Add(lbl);
}
}
protected void Button1_Click(object sender, EventArgs e)
{
TODO: Spara värdet från textrutan till en variabel
}Sv: Skapa dynamiska formulär
En annan sak: Jag tror att det är för sent att skapa rutorna i Load, tror du måste göra det redan i InitSv:Skapa dynamiska formulär
Tack på förhand,
MickeSv: Skapa dynamiska formulär
http://www.codeproject.com/aspnet/dynamiccontrols.asp
Det är ganska klurigt att få det att funka bra, speciellt för en nybörjare ;)
Jag skulle nog råda dig att skapa dynamiskt med hjälp av Repeater om det går, resp visa/dölja med Panel.Visible, det lär bli mycket enklare för dig..Sv:Skapa dynamiska formulär
Detta är inga problem att lösa i traditionell asp, men jag får inte till det i asp.net. Det enda jag vill ha fram är svaret (värdet) från en viss kontroll ibland ett antal kontroller på en panel.
Jag har inga problem med att skanna igenom alla kontroller efter tex kontrollID, men det är värdet jag söker.
protected void Button1_Click(object sender, EventArgs e)
{
// TODO: Ta reda på värdet
int controlCount;
controlCount = PlaceHolder1.Controls[0].Controls.Count;
for (int i = 0; i < controlCount; i++)
{
int controlID;
controlID = int.Parse(PlaceHolder1.Controls[0].Controls[i].ID.ToString());
}
}Sv: Skapa dynamiska formulär
http://www.codeproject.com/aspnet/dynamiccontrols.asp
Om du stångar pannan blodig med detta så kanske du ska glömma Server Controls ett tag,
och helt enkelt skriva ut rå HTML som du hade gjort i gammel-ASP..
Response.Write
Request.Form.Item("txtSvar")
fungerar fortfarande :)
Om du väljer Response.Write-metoden, så kolla på HtmlTextWriter först.Sv: Skapa dynamiska formulär
private List<TextBox> dynamicTbs = new List<TextBox>();
_någon_init_metod_som_körs_varje_gång_sidan_laddas()
{
Panel p;
p = new Panel();
this.Controls.Add(p);
foreach(något in någonting) //loopa igenom din databas
{
TextBox tb;
tb.ID = "dynamisk_tb_" + databas.Id; //skapa ett id som hänger ihop med databasen
p.Controls.Add(tb);
this.dynamicTbs.Add(tb); //Spara referens
}
}
_någon_click_metod_()
{
foreach(TextBox tb in this.dynamicTbs)
{
string s;
s = tb.Text;
_databas_.Spara(s); //Någon kul databaskod som sparar
}
}