Avatar billede jaffafo Nybegynder
02. december 2008 - 18:51 Der er 16 kommentarer og
1 løsning

RadioButtonList og OnSelectedIndexChanged

Jeg har en radiobuttonlist som jeg vil have sat efter hvad der står i databasen. F.eks. hvis databasekaldet returnerer "3" så skal RadioButtonListens Item med 3 i være valgt.

Når man så vælger et andet item skal der laves et nyt kald til databasen hvor den gemmer værdien fra det item.

Men jeg har det problem at den ikke vil hente værdien fra item'et, men istedet vælger det værdi som blev sat i page_load. Forvirrende forklaring, men koden kommer her:

RadioButtonList:
<asp:RadioButtonList id="rblRating" AutoPostBack="true" OnSelectedIndexChanged="click_rating" runat="server">
    <asp:ListItem Text="1" Value="1" />
    <asp:ListItem Text="2" Value="2" />
    <asp:ListItem Text="3" Value="3" />
    <asp:ListItem Text="4" Value="4" />
    <asp:ListItem Text="5" Value="5" />
</asp:RadioButtonList>

Default.aspx.cs:
    protected bool update;

    protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["s"] != null)
        {
            update = true;
            rblRating.SelectedValue = Session["s"].ToString();
        }
        else
        {
            update = false;
        }

    }

    protected void click_rating(object sender, EventArgs e)
    {
        if (update)
            Session["s"] = rblRating.SelectedItem.Value;
        else
            Session["s"] = rblRating.SelectedItem.Value;
    }


Ovenstående kode virker ikke. F.eks. hvis jeg vælger 2 første gang så kan jeg aldrig skifte den igen.. Det er ligesom at den redirecter før den når at gemme noget i sessionen. Hvad er det jeg gør forkert her?

I mit rigtige projekt har jeg et databasekald istedetfor en session, men alt andet er identisk og har også samme problem (kan dog ikke få fat i koden nu)

Håber en eller anden kan hjælpe..
Avatar billede kalp Novice
02. december 2008 - 19:39 #1
if(!IsPostBack){


        if (Session["s"] != null)
        {
            update = true;
            rblRating.SelectedValue = Session["s"].ToString();
        }
        else
        {
            update = false;
        }



}
Avatar billede kalp Novice
02. december 2008 - 19:40 #2
jeg bliver nød til, at spørge hvorfor du benytter session til det her?

hvis det bare handler om, at hente og vælge fra en dropdownbox?
Avatar billede kalp Novice
02. december 2008 - 19:44 #3
doh.. sorry..
du laver bare et eksempel.. forvirrede mig lidt:S
men jeg kan ikke lige se hvordan det kan gøres idendisk med et databasekald..

om ikke andert så tror jeg dit problem ligger i at du mangler if(!IsPostBack)
Avatar billede jaffafo Nybegynder
02. december 2008 - 19:49 #4
Jeg henter en værdi fra databasen, men da jeg hverken kan få fat i koden eller databasen herfra bruger jeg bare et session objekt som erstatning..

Problemet er at siden skal ved hvert postback hente nyeste værdi fra databasen og vise dette på siden.. Dvs jeg må kalde databasen (i dette tilfælde sessionen) ved hvert postback for at få fat i nyeste værdi..

Hvis jeg bruger (!IsPostBack) gør det ikke at jeg kun får den nyeste værdi kun første gang og derefter henter den ikke fra databasen igen?
Avatar billede jaffafo Nybegynder
02. december 2008 - 19:51 #5
"men jeg kan ikke lige se hvordan det kan gøres idendisk med et databasekald.."

Default.aspx.cs:
    protected bool update;

    protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["s"] != null)
        {
            update = true;
            rblRating.SelectedValue = Database.GetValue()
        }
        else
        {
            update = false;
        }

    }

    protected void click_rating(object sender, EventArgs e)
    {
        if (update)
            Database.UpdateValue(rblRating.SelectedItem.Value)
        else
            Database.StoreValue(rblRating.SelectedItem.Value)
    }
Avatar billede kalp Novice
02. december 2008 - 20:19 #6
Det første du skal sikre dig er at du lytter på det rigtige event på din dropdownbox.. det må være OnSelectedIndexChange eller lignende.

Det er så herinde at du evt. kan opdatere din database først.. og bagefter trække en ny værdi ud værdi fra databasen.

Dit page load bliver afviklet før dit event.. dvs. hvis du henter en værdi fra databasen og ændre det valgte i dropdownboxen så vil det være et forkert element der er valgt når eventet bliver afviklet.
Avatar billede jaffafo Nybegynder
02. december 2008 - 20:40 #7
Dvs noget i stil med:

Default.aspx.cs:
    protected bool update;

    protected void Page_Load(object sender, EventArgs e)
    {
        if (check om værdien er sat i db eller ikke)
            update = true;
        else
            update = false;
    }

    protected void click_rating(object sender, EventArgs e)
    {
        string value = rblRating.SelectedItem.Value;
        if (update)
            Database.UpdateValue(value);
        else
            Database.StoreValue(value);
        rblRating.SelectedValue = value;
    }
Avatar billede kalp Novice
02. december 2008 - 21:17 #8
skellet mæssigt så vil det ikke virke det der..
men det kommer an på om du sætter koden rigtig sammen når skellettet bliver fyldt ud:)

Jeg kan ikke se hele din kode, så det her kan jeg f.eks ikke se hvordan sætter værdien i dropdownbox'en ud fra databasen.

  protected void click_rating(object sender, EventArgs e)
    {
        string value = rblRating.SelectedItem.Value;
        if (update)
            Database.UpdateValue(value);
        else
            Database.StoreValue(value);
        rblRating.SelectedValue = value;
    }
Avatar billede jaffafo Nybegynder
02. december 2008 - 21:34 #9
RadioButtonList:
<asp:RadioButtonList id="rblRating" AutoPostBack="true" OnSelectedIndexChanged="click_rating" runat="server">
    <asp:ListItem Text="1" Value="1" />
    <asp:ListItem Text="2" Value="2" />
    <asp:ListItem Text="3" Value="3" />
    <asp:ListItem Text="4" Value="4" />
    <asp:ListItem Text="5" Value="5" />
</asp:RadioButtonList>

den bliver sat i aspx'en, ikke fra db
Avatar billede kalp Novice
02. december 2008 - 21:48 #10
sorry, men kan du skrive i steps hvad der forventer/vil have der sker?
jeg har forstået det sådan her.

1. Når siden loades kaldes databasen og ud fra den vælger man en position i rblRating
2. Brugeren foretager en ændring i rblRating og der laves et postback
3. Her afvikles OnSelectedIndexChanged eventet og databasen opdateres ud fra det valgte i dropdownbox'en.

Er det korrekt?
Avatar billede jaffafo Nybegynder
02. december 2008 - 22:05 #11
1. Siden loades og der laves et tjek i databasen om en post (med værdi mellem 1 og 5). Hvis denne post er i DB, sættes den RadioButton i rblRating som svarer til posten i DB til SELECTED
2. Hvis der foretages en ændring i rblRating skal denne ændres. I så fald der ikke allerede findes en post i DB kaldes en Store() function som oprettet en post i DB og hvis der allerede findes en post skal denne bare ændres og så kaldes en Update() function.

Eksempel:

Jeg åbner siden for første gang (dvs der ikke er oprettet en post i forvejen). Ingen RadioButton er sat i rblRating. Nu trykker jeg på "4". Der gemmes en post med "4" i DB og siden reloades. Nu sættes rblRa
Avatar billede jaffafo Nybegynder
02. december 2008 - 22:06 #12
Nu sættes rblRating.SelectedValue = DB.GetValue() (4). Nu trykker jeg så på "3" bagefter. Værdien i DB opdateres med "3" og siden reloades og igen sættes rblRating.SelectedValue = D.GetValue() (3).
Avatar billede kalp Novice
02. december 2008 - 22:30 #13
ud fra det du siger bør det her fungere.

    protected void Page_Load(object sender, EventArgs e)
    {
        if(!IsPostBack)
        {
          //Tjek om den findes i databasen. hvis ja.. sæt index på din dropdownbox.
        }
    }
    protected void RadioButtonList1_SelectedIndexChanged(object sender, EventArgs e) {
      //tjek om den findes i databasen.. hvis ja.. updater.. hvis ikke opret den
    }


det er det eneste der skal til
Avatar billede jaffafo Nybegynder
02. december 2008 - 22:55 #14
Det ser ud til at virke..  har sat en fiktiv DB op herhjemme og der får jeg det til at virke..

Jeg venter lige med at give points indtil den "rigtige" version virker, men smid bare svar nu :) - takker mange gange for hjælpen..
Avatar billede kalp Novice
02. december 2008 - 23:01 #15
det helt okay;)
Avatar billede jaffafo Nybegynder
03. december 2008 - 08:58 #16
Det funker bare perfekt.. :)
Avatar billede kalp Novice
03. december 2008 - 11:00 #17
super & tak for point;)
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