webForumDet fria alternativet

Få ur värde ur Repeatern

.NET

20 svar · 466 visningar · startad av Nöff

Medlem sedan nov. 2003569 inlägg
Frågan#1

private void Page_Load(object sender, System.EventArgs e)
{
TextBox entextbox=new TextBox();
Repeater1.Controls.Add(entextbox);
}

private void Button1_Click(object sender, System.EventArgs e)
{
Response.Write(Repeater1.Controls[0]);
}

Det funkar inte att få ur värdet ur min dynamiskt skapade textbox. :( Nån som vet hur man gör?

Medlem sedan maj 2001329 inlägg
#2

Lite konstigt sätt att lägga till den men jaja.

En add lägger alltid till din kontroll sist i högen av kontroller. Och en repeater innehåller förutom dina kontroller en massa andra kontrollen som den skapar lite hur som helst. Så det enklaste är att använda FindControl som finns på alla control collections..DVS

private void Page_Load(object sender, System.EventArgs e) { 
TextBox entextbox=new TextBox(); 
entextbox.Id = "entextbox"; //sätt id på den så att vi kan hitta den
Repeater1.Controls.Add(entextbox); 
} 

private void Button1_Click(object sender, System.EventArgs e) { 
TextBox entextbox = (TextBox)Repeater1.Controls.FindControl("entextbox");

Ibland kan det vara svårt att veta vart en kontroll finns om den änns finns i den controll collectionen eller i en under den, oftast med en datagrid. Då kan man göra en liten loop för att se hur ens kontroller ser ut

foreach(Control control in Repeater1.Controls){
Response.Write(control.GetType().ToString());
}

så får du ut vilka kontroller som finns var i den.

Lycka till

Visst ja..koden är som vanligt inte testad..bara skriver rakt upp och ner :)

Medlem sedan nov. 2003569 inlägg
#3

Hej

tyvärr kan jag inte använda ID i detta fallet, eftersom jag ska sen göra en loop så jag får ut ett antal textboxar dynamiskt, och då om jag sätter ett ID på den klagar den på att ID:et är multipelt, så det är nog en bättre ide att inte sätta ett ID, och söka på den utan att använda FindControl och istället använda Control[x] eller nåt. uuh Behöver hjälp. Hur gör man då?

for(int x=0;x<10;x++)
{
TextBox mytextbox=new TextBox();
mytextbox.Text="dynamisktvärdegrej";
Repeater1.Controls.Add(mytextbox);
}

Medlem sedan nov. 2003569 inlägg
#4

Förresten , vad är det för skillnad på Items och Controls?

Medlem sedan maj 2001329 inlägg
#5
for(int x=0;x<10;x++) 
{
TextBox mytextbox=new TextBox();
mytextbox.Text="dynamisktvärdegrej" + x; // observera +x
Repeater1.Controls.Add(mytextbox);
}

Sen vet jag inte riktigt hur du vill få ut dina textboxar antingen vet du vilket x du vill ha och då gör du en FindControl("dynamisktvärdegrej"+x);

Om du vill ha ut alla kan du göra nått i stilen med

foreach(Control control in Repeater.Controls){
  try{
    TextBox tb = (TextBox)control;
    :
    //gör saker med varje tb
    :
  }
  catch{
    //Oj det var ingen tb (är egentligen inte bra att använda try catch så här, men orkar inte skriva ihop en if-sats med typerna)
  }
}

Med reservation att textboxarna kan ligga som banr till nån annan kontroll då man får göra en dubbel loop med alla controls i controls:en

;)

Medlem sedan maj 2001329 inlägg
#6

Förresten , vad är det för skillnad på Items och Controls?

Bra fråga.

Jag tror att skillnaden är att controls innehåller även html kontroller, medans items bara innehåller det du databinde med. När det gäller reapeters och datagridar så använder jag nästan alltid uteslutande Control collectionen eftersom jag vill åt headern och den finns itne med i items.
Lite flummig skillnad så jag vet inte rikgtigt, nån annan?

annats länk till classen

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemwebuiwebcontrolsrepeatermemberstopic.asp

Ursäkta min svengelska

Medlem sedan nov. 2003569 inlägg
#7

Bäddat för trubbel ;)

Men går det att sätta samma ID på allihopa?, och inte få felmeddelandet att det är multipla ID:en?.

Medlem sedan maj 2001329 inlägg
#8

Om du menar med mitt ex:

for(int x=0;x<10;x++) 
{
TextBox mytextbox=new TextBox();
mytextbox.Text="dynamisktvärdegrej" + x; // observera +x
Repeater1.Controls.Add(mytextbox);
}

Ja eftersom du inte sätter samma id..idna blir ju dynamisktvärdegrej0, dynamisktvärdegrej1, dynamisktvärdegrej2...etc

Annars kan du inte göra det via dynamiskt lägga till i reapter så vitt jag vet.

Medlem sedan nov. 2003569 inlägg
#9

Det kan ju bli lite svårt att veta vilka som är vilka sen när man ska få ur värdena om man inte har samma id på alla textboxarna :)

Medlem sedan maj 2001329 inlägg
#10

Hur vet du nu vilka som är vilka?

Medlem sedan juni 20011 732 inlägg
#11

Varför måste du lägga till kontrollen i koden? Kan du inte slänga in den direkt i din repeater så blir det sååååå mycket enklare...

Medlem sedan nov. 2003569 inlägg
#12

Jag kommer faktiskt inte ihåg varför jag inte gjorde det, men det var nåt skäl iaf. jag ska ha en dropdownlist som fylls i och sånt också i repeatern.

Medlem sedan juni 20011 732 inlägg
#13

Nöff skrev:

Jag kommer faktiskt inte ihåg varför jag inte gjorde det, men det var nåt skäl iaf. jag ska ha en dropdownlist som fylls i och sånt också i repeatern.

Japp, och det går alldeles utmärkt att göra utan att du behöver lägga till den i koden. :) Exakt hur ska repeatern fungera?

Medlem sedan nov. 2003569 inlägg
#14

Den är ganska avancerad, men den ska funka såhär.

Det ska vara som ett frågeformulär, där det ställs en fråga, och ett antal svarsalternativ i en dropdownlist. Och så fort man klickat på något svarsalternativ i dropdownlisten så ska det genereras en ny fråga med tillhörande svarsalternativ i en dropdownlist. och så håller det på så tills alla frågorna är besvarade.

Medlem sedan nov. 2003569 inlägg
#15

Jag har kommit en bit på väg:


private void Page_Load(object sender, System.EventArgs e)
{
			if(Page.IsPostBack==false)
			{
				nyfraga(1);
			}
}

public void nykund(int kundID)
{
OleDbDataReader reader=SQLFILLREADER("SELECT * FROM kund WHERE kund.ID=" + kundID);

fragareader.Read();
Label labelkund=new Label();
labelkund.Text=reader["kundprodukt"].ToString();

TextBox textboxID=new TextBox();
textboxID.Text=reader["ID"].ToString();

DropDownList drop=new DropDownList();
drop.SelectedIndexChanged+=new EventHandler(dropt_SelectedIndexChanged);

OleDbDataReader reader2=SQLFILLREADER("SELECT * FROM produkter WHERE produkter.ID=2");

while(reader2.Read())
{
ListItem list=new ListItem();
list.Value=reader2["ID"].ToString();
list.Text=reader2["produktnamn"].ToString();
drop.Items.Add(list);
}

Label labeltab=new Label();
labeltab.Text="<BR>";

Repeater1.Controls.Add(new Control());
Response.Write(Repeater1.Controls.Count);
Repeater1.Controls[Repeater1.Controls.Count-1].Controls.Add(labelkund);
Repeater1.Controls[Repeater1.Controls.Count-1].Controls.Add(textboxID);
Repeater1.Controls[Repeater1.Controls.Count-1].Controls.Add(dropsvarsalt);
((DropDownList)this.Repeater1.Controls[Repeater1.Controls.Count-1].Controls[2]).SelectedIndexChanged+=new EventHandler(dropsvarsalt_SelectedIndexChanged);
Repeater1.Controls[Repeater1.Controls.Count-1].Controls.Add(labeltab);

}

private void dropsvarsalt_SelectedIndexChanged(object sender, EventArgs e)
{
Response.Write("hej");
nykund(((DropDownList)this.Repeater1.Controls[Repeater1.Controls.Count-1].Controls[2]).SelectedItem.Value));}

Men jag har problem med händelsehanteraren, det händer inte ett skvatt när jag man klickar på Dropdownlisten :( även fast jag sätter 2 eventhandlers på den.

Medlem sedan nov. 2003569 inlägg
#16

Visst är det ett delikat problem :i
Nån som vet hur man får en onclick händelsehanterare att fungera på en dynamiskt skapad dropdownlist webcontrol?.

Medlem sedan juni 20011 732 inlägg
#17

Du har en fråga och en dropdownlist med tillhörande svar, varför måste du ha dem i en repeater överhuvudtaget? Jag kanske har missuppfattat dig men räcker det inte med en label som innehåller frågan och en dropdownlist med svarsalternativen och sedan lite kod för att hantera hur frågorna ska rullas ut och svaren sparas?

Medlem sedan nov. 2003569 inlägg
#18

Jupp.
Det är det koden gör.

Medlem sedan nov. 2003569 inlägg
#19

Behöver hjälp innan jag får krupp. :P

Det måste väl gå att skapa en händelsehanterare på en dynamiskt skapad webcontrol väl?.

Medlem sedan juli 20011 304 inlägg
#20

Delegates :)

Kolla på "Adding it up : dynamically adding and deleting events"

260 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)