[ ads @ 28.01.2007. 10:48 ] @
Imam jedan cudan problem sa cuvanjem liste u session-u kada na strani imam updatepanel. Napravio sam malu aplikaciju da bih lakse objasnio ste me zeza. Potrebno mi je nesto nalik korpi u web prodavnicama. Nema logovanja usera, nema kolicne skroz je jednostavan primer i ceo mozete skinuti kao attach uz poruku. Osnovna klasa mi je Artikal. U skracenom obliku izgleda ovako: Code: public class Artikal { public Artikal() { } private int id; private string naziv; private bool uKorpi; public int Id {…} public string Naziv {…} public bool UKorpi {…} } Prvo u Global.asax inicijalizujem Session u kome cu cuvati id-eve artikala Code: void Session_Start(object sender, EventArgs e) { Session["Korpa"] = new ArrayList(); } Na strani za pretragu imam jedno dugme i DataGrid za prikaz rezultata, ali sa cekiranim chkUKorpi ukoliko je artikal vec dodat u session. To izgleda ovako: Code: protected void btnTrazi_Click(object sender, EventArgs e) { this.dgPretraga.DataSource = this.TraziArtikle(); this.dgPretraga.DataBind(); } private List<Artikal> TraziArtikle() { List<Artikal> artikli = new List<Artikal>(); Artikal art; art = new Artikal(); art.Id = 1; art.Naziv = "Tastatura"; artikli.Add(art); art = new Artikal(); art.Id = 2; art.Naziv = "Mis"; artikli.Add(art); art = new Artikal(); art.Id = 3; art.Naziv = "Monitor"; artikli.Add(art); //provera da li je artikal vec u korpi ArrayList korpa = (ArrayList)Session["Korpa"]; foreach (int id in korpa) { foreach (Artikal a in artikli) { if (a.Id == id) a.UKorpi = true; } } return artikli; } ... <asp:datagrid id="dgPretraga" runat="server" autogeneratecolumns="False" datakeyfield="Id" ShowHeader="False"> <Columns> <asp:TemplateColumn> <ItemTemplate> <asp:CheckBox ID="chkUKorpi" runat="server" Checked='<%# DataBinder.Eval(Container.DataItem, "uKorpi")%>' AutoPostBack="True" OnCheckedChanged="chkUKorpi_OnCheckedChanged" /> </ItemTemplate> </asp:TemplateColumn> <asp:TemplateColumn> <ItemTemplate> <%# DataBinder.Eval(Container.DataItem, "Naziv")%> </ItemTemplate> </asp:TemplateColumn> </Columns> </asp:datagrid> ... protected void chkUKorpi_OnCheckedChanged(object sender, EventArgs e) { int ind = ((DataGridItem)((CheckBox)sender).NamingContainer).ItemIndex; int id = ((int)this.dgPretraga.DataKeys[ind]); ArrayList korpa = (ArrayList)Session["Korpa"]; if (((CheckBox)sender).Checked == true) { korpa.Add(id); } else { korpa.Remove(id); } Session["Korpa"] = korpa; } I sad glavni problem je u CheckBox-u kojim se neki artikal dodaje u korpu. Na pocetku sve lepo radi i smesta artikle u session, zatim idem na stranicu koja prikazuje sta je u korpi, ali sa pravim PostBack-om. Kada se vratim na dugme Back pa opet radim pretragu ponovo mi se, ali ovog puta potpuno neocekivano, poziva dogadjaj OnCheckedChanged koji sve pokvari :(. Zezam se vec dva dana sa ovim i ne mogu da resim. Napominjem jos jednom da ukoliko zakomentarisete updatepane i trigger sve radi super. Ukoliko vam je nezgodno da se snadjete u postu stavio sam attach, programcic je jako prost. Molim za pomoc. [Ovu poruku je menjao ads dana 29.01.2007. u 13:08 GMT+1] |