Jag tror inte det spelar så stor roll om du binder repeatern 2 gånger. Cleara den först bara.
Nåt sätt att kolla innehåll innan page_load körs
27 svar · 638 visningar · startad av Nöff · sida 2 av 2
Frågan, av Nöff
Hej.. Om man har en dropdownlist med en händelsehanterare på. när man klickar på dropen så anropas: DropDownList1.SelectedIndexChanged() { Response.Write(DropDownList1.SelectedIndex) } Men, det är ju så att PageLoad körs ju först. sen funktionen. 1\. Kan man påverka detta så att DropDownList1.SelectedIndexChanged funktionen körs först och sen pageLoad?. eller 2\. Kan man innan PageLoad
Läs frågan i sin helhet →Det funkade inte Gladh.
Repeatern förlorade sina selectade värden om jag la bindrepeater() i händelsefunktionerna istället för i Page_Load IsPostBack.
Verkar som man bara kan skapa om dynamiska kontroller i Page_Load.
Verkar som man bara kan skapa om dynamiska kontroller i Page_Load.
Vad menar du med dynamisk kontroll? En dynamisk kontroll för mig är en kontroll som jag skapar i CodeBehind-filerna. Och inte behöver finnas med på ASPX-sidan.
Dessa dynamiska kontroller kan man skapar precis var man vill i sin codebehind-sida.
Dett skulle dock underlätta om du la ut lite kod som vi kan titta på, för jag kan inte se att det skall vara så svårt...
Prästen: Problemet är ju med prestanda, det är dumt att göra allt 2 gånger om det endas behövs göras 1 gång.
- M
public void bindrepeater(int kundID)
{
OleDbDataReader reader=SQLFILLREADER("SELECT * FROM kund WHEREkund.ID=" + kundID);
reader.Read();
Label labelkund=new Label();
labelkund.Text=reader["kund"].ToString();
TextBox textboxID=new TextBox();
textbox.Text=reader["ID"].ToString();
OleDbDataReader reader2=SQLFILLREADER("SELECT * FROM produkter WHERE produkter.kundID=" + reader["ID"].ToString()));
while(reader2.Read())
{
ListItem list=new ListItem();
list.Value=reader2["kundID"].ToString();
list.Text=reader2["produktnamn"].ToString();
drop.Items.Add(list);
}
Label label=new Label();
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(textbox);
Repeater1.Controls[Repeater1.Controls.Count-1].Controls.Add(drop);
Repeater1.Controls[Repeater1.Controls.Count-1].Controls.Add(label);
}
här
Dessa dynamiska kontroller kan man skapar precis var man vill i sin codebehind-sida.
Det verkar inte så, placerar jag den i händelsefunktionerna förlorar den de selectade/ifyllda värdena vid postback, men placerar jag den i Page_Load behåller den sina värden vid postback. ASP.NET är väl kanske uppbyggd så att dynamiska kontroller alltid ska byggas i Page_Load eller nåt.
Prova att bygg en egen dynamisk kontroll och placera den i händelsefunktionerna och i Page_Load om vartannat så får du se.
Har läst på massor om ditt problem, och har inte blivit mycket klokare :(
Tyvärr verkar det som om .NET helt automatiskt fixar till Postbacken om skapandet av controllen ligger i Page_Load() annars så tappar man den.
Hittade dock denna länk, som hävdare att han löst problemet. Har dock inte kollat kode (får inte ladda ner kod på jobbet, brandväggen tror allt som innehåller kod, är virus :(, till och med vanliga txt filer med kod, stoppas.)
http://www.denisbauer.com/ASPNETSamples.aspx
- M
du gladh.
Jag tror jag kommit till den punkt där det kanske är bättre att göra applikationen i WinForms istället, jag börjar tro att denna applikationen inte är helt lämpad för Webforms. Eller jag får se, får tänka över det.
Men tack för länken du!. Det var precis vad jag behövde.
du har ingen i C#, jag är urusel på VB :e
Men är det OK att lägga bindrepeater() i Page_Load?, så jag först återskapar den vid postback och sen läser igenom vad användaren har kryssat i för värden och sen sparar ner i min databas?. Är det korrekt att göra så?. Eller ska jag lägga den i Page_Init istället?.
Kan du göra den i WinForms så låter det som ett helt klart enklare alternativ.
Tyvärr har jag ingen i C#.
Som jag förstod det så skall det inte spela någon roll om du gör det i Load eller Init
- M
Hmm nånting jag upptäckte när man gör dynamiska dropdownlistor i repeaters är att fyller man dropdownlisten med items EFTER man "add:at" dropdownlisten i repeatern så hålls viewstaten hårdare på de selectade värden än om man fyller dropdownlisten med items INNAN man "add:at" dropdownlisten i repeatern.
Den där länken förklarade lite om det, intressant.