Avatar billede mccannon Nybegynder
01. august 2004 - 16:06 Der 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 :-)


____CODE_____
private void Page_Load(object sender, System.EventArgs e)
{
  /*Creates the grid and databind it*/   
  this.ConfigGrid();
  this.DoDataBind();
//a postback has occured
  if(Session["EditTab"] != null)
  {   
      this.tblsubcat.Rows[2].Cells[0].Controls.Add((Table)Session["EditTab"]);
  }
}
private void subcatgrid_ItemCommand(object source, DataGridCommandEventArgs e)
{
if(e.CommandName == "Edit")
{
int ModelLvl1Id = int.Parse(e.Item.Cells[0].Text);
string productcat = e.Item.Cells[1].Text;
bool usedBy = ((CheckBox)e.Item.FindControl("chkrestrict")).Checked;
bool package = ((CheckBox)e.Item.FindControl("chkpack")).Checked;
this.CreateEditTable(ModelLvl1Id,productcat,usedBy,package);
((DataGrid)source).SelectedIndex = e.Item.ItemIndex;
((DataGrid)source).DataBind();
}
}

/*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);

C = new TableCell();
LinkButton IB = new LinkButton();
IB.Text = "Opdater";
IB.Click +=new EventHandler(IB_Click);
C.Controls.Add(IB);
R.Cells.Add(C);
T.Rows.Add(R);
/*Adds the table to the usercontrol*/
this.AddEditTable(T);
this.Session.Add("EditTab",T);
}
private void AddEditTable(Table Tab)
{
this.tblsubcat.Rows[2].Cells[0].Controls.Add(Tab);
}
private void IB_Click(object sender, EventArgs e)
{   
LinkButton lb = (LinkButton)sender;
TableRow r = (TableRow)lb.Parent.Parent;
TableCell c1 =(TableCell)r.Cells[1];
TableCell c2 =(TableCell)r.Cells[2];
CheckBox box1 = (CheckBox)c1.Controls[0];
CheckBox box2 = (CheckBox)c2.Controls[0];
bool box1check = box1.Checked;
bool box2check = box2.Checked;
}
Avatar billede snepnet Nybegynder
01. august 2004 - 16:43 #1
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.
Avatar billede snepnet Nybegynder
01. august 2004 - 16:53 #2
Der er også noget lidt usundt ved at du databinder hver gang, men jeg skal nok se noget mere kode hvis jeg skal kunne løse det.
Avatar billede mccannon Nybegynder
01. august 2004 - 17:04 #3
jamen, jeg kalder jo kun CreateEditTable når der bliver trykket på edit knappen i datagriddet..

du siger bare hvilken del af koden du vil se :)
Avatar billede snepnet Nybegynder
01. august 2004 - 17:44 #4
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.

Jeg er desværre nok væk de næste 2-3 timer.
Avatar billede mccannon Nybegynder
01. august 2004 - 18:00 #5
protected System.Web.UI.HtmlControls.HtmlTable tblsubcat;
protected System.Web.UI.WebControls.Label lblsubcatheader;
protected System.Web.UI.WebControls.Panel pnlsubcatheader;
protected System.Web.UI.WebControls.DataGrid subcatgrid;
protected int ModelId;
protected Table T;
protected CheckBox CB1;
protected CheckBox CB2;

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);
           
BTC = new ButtonColumn();
BTC.ButtonType = ButtonColumnType.LinkButton;
BTC.CommandName = "Edit";
BTC.Text = "Edit";
this.subcatgrid.Columns.Add(BTC);

this.subcatgrid.ItemCommand += new DataGridCommandEventHandlersubcatgrid_ItemCommand);
}


private void DoDataBind()
{
DataSet DS = AF.GetGridData(this.GetSetModelId);
subcatgrid.DataSource = DS;
subcatgrid.DataBind();
}
Avatar billede snepnet Nybegynder
01. august 2004 - 18:52 #6
Takker... jeg er tilbage om et par timer.
Jeg skal nok kigge på det.
Mvh
Avatar billede mccannon Nybegynder
01. august 2004 - 20:12 #7
og selvfølgelig, hvis du vil se koden for den første usercontrol and selve webformen..så siger du også bare til :)
Avatar billede snepnet Nybegynder
01. august 2004 - 23:01 #8
Ja - det tog så nogle flere timer end jeg regnede med... har du stadig problemer ?
Avatar billede mccannon Nybegynder
01. august 2004 - 23:44 #9
yeps :-(
Avatar billede snepnet Nybegynder
01. august 2004 - 23:47 #10
Har du mulighed for at lægge projektet ud online i en zip-fil ?
Avatar billede snepnet Nybegynder
01. august 2004 - 23:47 #11
el.l.
Avatar billede mccannon Nybegynder
02. august 2004 - 05:16 #12
Avatar billede snepnet Nybegynder
02. august 2004 - 08:22 #13
Kanon... Det er ikke sikkert jeg kan komme til at kigge på det før i aften.
Du er godt nok tidligt oppe ?!?
Avatar billede mccannon Nybegynder
02. august 2004 - 09:12 #14
tjah, jeg skal jo op ret tidligt for at være på tdc klokken 7:30
Avatar billede snepnet Nybegynder
02. august 2004 - 22:15 #15
Hej mccannon... er du på ?
Avatar billede snepnet Nybegynder
03. august 2004 - 01:03 #16
Det er noget gustent noget.... Jeg tror du bliver nødt til at lave lidt omstruktureringer hvis du skal have det til at virke fornuftigt.

Til at starte med... Kan du ikke slå trace til - og så checke om du ikke med jævne mellemrum får en runtinefejl (dublicate ids).

Mvh.
Avatar billede mccannon Nybegynder
03. august 2004 - 05:25 #17
yup, hvis jeg slår trace til for jeg en fejl når jeg klikker på opdater knappen
Avatar billede snepnet Nybegynder
03. august 2004 - 12:07 #18
hej mccannon :o)

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
Avatar billede mccannon Nybegynder
03. august 2004 - 17:06 #19
Hejsa :)

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 :-)

Kind regards
Avatar billede snepnet Nybegynder
03. august 2004 - 23:41 #20
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
Avatar billede snepnet Nybegynder
08. august 2004 - 17:11 #21
Er du stadig igang her mccannon ?
Avatar billede mccannon Nybegynder
08. august 2004 - 17:16 #22
nææ.. så du burde egentlig ligge et svar :)
Avatar billede snepnet Nybegynder
08. august 2004 - 17:54 #23
jamen det får du da bare :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester