Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[C#] niet gebonden checkbox op repeater

Pagina: 1
Acties:

  • Stefke
  • Registratie: December 2000
  • Laatst online: 10:31
Ik ben bezig met een winkelmandje met daarop een aantal artikelen, en een checkbox per artikel. Als je voor één of meer artikelen de checkbox aanvinkt en op update klikt moeten die producten verwijderd worden.

Nu ben ik al de h-e-l-e dag bezig, letterlijk :-( |:( , om de status van die checkbox op te pikken en het wil maar niet lukken.

C#:
1
2
3
4
5
6
7
8
9
10
11
12
<asp:Repeater ID="rptWinkelWagenGroot" runat="server" OnItemDataBound="rptWinkelWagenGroot_ItemDataBound" >
  <ItemTemplate>
    <asp:CheckBox ID="chkVerwijderArtikel" runat="server" EnableViewState="true"  />
    <asp:Label ID="lblVerwijder" runat="server" Text="etst"></asp:Label>

    <asp:Label ID="lblArtikelPrijs" runat="server" Text='<%# Eval("ArtikelSubTotaal", "{0,00:c}") %>'>
    <!---En zo nog wat productgegevens-->
     
  </ItemTemplate>
</asp:Repeater>

<asp:ImageButton ID="imbUpdate" runat="server" ImageUrl="~/images/button_update_cart.gif" onclick="imbUpdate_Click" />


De checkbox is dus niet gebonden. De winkelmand werkt goed, ik kan er meerdere producten instoppen. Daar geen problemen. Maar als ik van één of meer producten de checkbox aanvink en deze probeer uit te lezen dan lukt dat niet. Ze hebben altijd de status die default ingesteld staat).


Ik doe dat nu met de volgende code

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
protected void imbUpdate_Click(object sender, ImageClickEventArgs e)
        {
            for (int i = 0; i < rptWinkelWagenGroot.Items.Count; i++)
            {
                CheckBox chk = (CheckBox)rptWinkelWagenGroot.Items[i].FindControl("chkVerwijderArtikel");
                if (chk.Checked)
                {
                    Label lbl = (Label)rptWinkelWagenGroot.Items[i].FindControl("lblVerwijder");
                    lbl.Text = "wel";
                    //clsWinkelwagen.WW.ArtikelVerwijderen(ArtikelNr);
                }
                else
                {
                    Label lbl = (Label)rptWinkelWagenGroot.Items[i].FindControl("lblVerwijder");
                    lbl.Text = "niet";
                }
            }


Deze code geeft in een label achter de Checkbox aan "wel" of "niet". De bedoeling is uiteindelijk om van de aangecheckte Artikelen de method Artikelverwijderen aan te roepen. (Maar dat kan wellicht ook op een andere plek, de bovenstaande code is het laatste wat ik geprobeerd heb om uit te lezen wat de checkbox.checked is, en ik heb nog niet eens geprobeerd om het ArtikelNr op te pikken van de regel waar het om gaat)

Maar...ik krijg alleen maar "wel" als de checkboxen default op true staan, of "Niet" als ze default op false staan. Als ik ze van status verander en dan deze event doorloop krijg ik niet de waarde die ik op het scherm zie. Ik heb het idee dat ik e.o.a. eigenschap moet instellen die er voor zorgt dat de "schermwaarde" doorgegeven wordt, want de status wordt wel degelijk uitgelezen, alleen niet de status die ik ze geef door te klikken.

Ik heb het ook onder ItemDataBound van de repeater geprobeerd (die doorloopt alle items die gebonden worden), maar omdat de checkboxen bij "postback" weer op hun default waarde staan krijg ik niet de waarde die ik instel.

  • PolarBear
  • Registratie: Februari 2001
  • Niet online
maar omdat de checkboxen bij "postback" weer op hun default waarde staan krijg ik niet de waarde die ik instel.
Post je page_load eens?

  • Stefke
  • Registratie: December 2000
  • Laatst online: 10:31
Daar zit niks in gerelateerd aan de checkboxen:

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
protected void Page_Load(object sender, EventArgs e)
        {
            clsWinkelWagen objWinkelWagen;

            //if (!Page.IsPostBack)
            {
                decSubTotaal = 0;
            }
   
            if (Session["WinkelWagen"] != null)
            {
                objWinkelWagen = (clsWinkelWagen)Session["WinkelWagen"];

                // even testen of ik een winkelwagen heb
                lblWinkelWagenID.Text = objWinkelWagen.WinkelWagenID.ToString();
                
                //winkelwagen koppelen aan repeater
                rptWinkelWagenGroot.DataSource = clsWinkelWagen.WW.Artikelen;
                rptWinkelWagenGroot.DataBind();
                
            }
        }


Edit: he, verdorie. Je vraag bracht me weer terug bij de postback (daar heb ik wel mee gespeeld maar ik kreeg m er niet op de juiste manier in). Ik heb het aangepast en nu werkt het wel. Een handeling van 30sec die me een dag rotzooien had kunnen besparen! (Maar wel weer veel geleerd vandaag)

[ Voor 20% gewijzigd door Stefke op 27-10-2012 19:07 ]