01. august 2004 - 16:06Der er
22 kommentarer og 1 løsning
Checkbox skifter ikke værdi efter postback
Hej alle Jeg har en adminpage.aspx, on that i have a usercontrol der altid er der, og så har jeg en anden usercontrol som bliver loadet ind på adminpage.aspx afhængig af en event på den første usercontrol.
Den anden usercontrol bliver loadet ind på adminpage.aspx når en bruger vælger noget i en dropdownliste på den første usercontrol. PÅ den anden usercontrol har jeg et datagrid med nogle checkboxes og en edit knap..når brugeren klikker på edit knappen bliver der genereret en tabel der indeholder værdierne af den valgte række i datagriddet . Altså noget tekst, og om checkboxene er chekked eller uncheckked.
Okay, på den tabel som bliver genereret er der en opdater knap(linkbutton) når brugeren klikker på den opdater knap vil prøver jeg at hente værdierne fra de checkboxe som ligger i det nyligt genereret table, men ligemeget hvad, så er værdier altid de samme som de var da de blev lagt ind i tabellen.
Jeg kan simpelthen ikke se hvor fejlen er..så... please help :-)
/*gets called from the datagrid item_command event */ private void CreateEditTable(int modelid, string productcat, bool restrict, bool pack) { T = new Table(); T.ID = "EditTable"; T.EnableViewState = true; T.BorderStyle = BorderStyle.Solid; T.GridLines = GridLines.Both; TableRow R = new TableRow(); TableCell C = new TableCell(); /*makes the header cell*/ C.CssClass = "box_top"; //makes a panel for background image Panel P = new Panel(); P.BackImageUrl = "../_gfx/topbar_tile.gif"; P.Width = Unit.Percentage(100); //makes a label for the text in the header" Label L = new Label(); L.Text = "Rediger Produktgruppen " + productcat; //adds the label to the panel P.Controls.Add(L); //adds teh panel to the table cell C.Controls.Add(P); C.ColumnSpan = 4; R.Cells.Add(C); T.Rows.Add(R); /*Makes the item row to edit*/ R = new TableRow(); C = new TableCell(); C.Text = productcat; R.Cells.Add(C); C = new TableCell(); CB1 = new CheckBox(); CB1.ID = "chkEditUsed"; CB1.Checked = restrict; C.Controls.Add(CB1); R.Cells.Add(C); C = new TableCell(); CB2 = new CheckBox(); CB2.ID = "chkPackage"; CB2.Checked = pack; C.Controls.Add(CB2); R.Cells.Add(C);
Danmark vil mindske afhængigheden af globale techgiganter, men det kræver mere end politiske formuleringer og strategier, understreger PROSA’s formand Niels Bertelsen.
Hver enesta gang du kalder CreateEditTable angiver du Selected på dine checkboxe. Du angiver altså en værdi på checkboxen inden du kører IB_Click, og hvis de værdier er de samme hele tiden - vil de så også være det i handleren af IB_Click.
Hej igen... Jeg vil gerne se din databinding, og høre om du nogensinde kommer ind i den her : private void IB_Click(object sender, EventArgs e)
Desuden vil jeg gerne se de kontroller du har på siden.... Sikkert alle de webcontrols du har angivet med protected foran øverst i klassen hvis du bruger VS.
Ja, jeg kommer ind i den click event..men kun hvis det table er gemt i en session altså, i Session["EditTab"]
/*Use for setting up the grids with boundcolumns, a buttoncolum and a templatecolumn for the the checkboxes*/ private void ConfigGrid() { BoundColumn BC; TemplateColumn TC; ButtonColumn BTC; this.subcatgrid.AutoGenerateColumns = false; this.subcatgrid.SelectedItemStyle.BackColor = Color.Wheat;
BC = new BoundColumn(); C.DataField = "hiddensubcatid"; this.subcatgrid.Columns.Add(BC);
BC = new BoundColumn(); BC.DataField = "subcatname"; this.subcatgrid.Columns.Add(BC);
TC = new TemplateColumn(); TC.ItemTemplate = new CheckTemplate("","chkrestrict","usedby"); this.subcatgrid.Columns.Add(TC);
TC = new TemplateColumn(); TC.ItemTemplate = new CheckTemplate("","chkpack","showpack"); this.subcatgrid.Columns.Add(TC);
hvis der går koks i id's får du det ikke til at virke..... hvis der ikke entydig genkendelse af kontrollen vil det gå i potten, og du vil ikke kunne samle events op etc.
jeg lagde for øvrigt mærke til (i din kode), at selectedindexchanged handleren for dropdownlisten køres hver gang - hvad enten brugeren har valgt noget nyt eller ej. til gengæld er det så den eneste grund til at du får noget på skærmen.
jeg er meget ked af at sige det, men jeg tror du er nødt til at lave nogle designændringer :o(
du kan muligvis haxe det igennem på en eller anden måde, men jeg tror du vil blive ved med at løbe ind i problemer på sigt. (jeg prøvede selv et par forskellige hax igår, men ramte ikke noget fornuftigt).
Det er særligt sådan noget som at der loades en kontrol fra en kontrol, selvom kontrollen sættes ind i en container på formen, og at kontroller gemmes i session (går jeg udfra er et hax for overhovedet at få den vist) + det jeg skrev med selectedindexchanged, der springer lidt i øjnene.
jeg vil sådan set meget gerne hjælpe, men det du i givet får tilbage fra mig vil så nok være forslag til nogle lidt mere omfattende ændringer, end du formentlig havde håbet på :o(
håber ikke du tager det ilde op... det er bestemt ikke for at spille smart eller noget. Mvh
no offence taken jeg tror , for at gøre det på den her måde at man skal over i noget med bubbelign events..og det har jeg ikek tid til at sætte mig ind i nu :-( men ja, jeg er også kommet frem til at det skal ske nogle dratiske ændringer og indtil vidre har jeg droppet usercontrollerne for dette projekt :-/
Men tak fordi du tog dig tid til at kigge på det :-)
eventbubbling er supernemt... det er bare en override : protected override bool OnBubbleEvent(object source, EventArgs args), og du kan hæve en bobbel ved RaiseBubbleEvent(object source, EventArgs e); overrided skal returnere en booler, der angiver om boblen skal fortsætte - eller stoppes. Det vil ikke løse det problem du har nu desværre (har prøvet), men det er fedt i mange sammenhænge, og det er også det der bruges i f.eks. datagriddet. Skriv endelig hvis der er noget. Mvh
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.