Avatar billede trumf Nybegynder
29. januar 2006 - 13:33 Der er 10 kommentarer og
1 løsning

request querystring

Hejsa E

jeg har en tabel med nogle data og nogle overskrifter. DIsse data kan sorteres efter overskrift, så hvis jeg klikker på navn sorteres efter navn og hvis det er pris så sorteres efter den osv...

Jeg har lavet det således, at der kun vises x antal resultater på hver side og at der kan skiftes side med nogle knapper.

Derudover har jeg lavet det så hvis man feks klikker på navn to gange skifter sorteringen mellem ASC og DESC.

            if (Session["sort"].ToString() == Request.Querystring["sort"].ToString())
            {
                if (Session["sortOrder"].ToString() == "ASC")
                    Session["sortOrder"] = "DESC";
                else
                {
                    Session["sortOrder"] = "ASC";
                }
            }

problemet er bare at når man klikker på knapperne så husker den hvad der står i requestet så den skifter hver anden gang man klikker på knapperne....

Hvordan får man request til at virke som i de gode gamle asp dage ?
Avatar billede Syska Mester
29. januar 2006 - 13:39 #1
Altså fjerne GET query i link adressen i browseren?

I dag er det jo viewstate, som efter min mening både giver pros og cons....

hvordan linker du siderne sammen? viewstate eller old-fachion links? det er vel fordi der på din knapper kommer til at stå noget ala "link.aspx?sort=Name" og når du klikker på din knapper kommer det med... eller?

// ouT
Avatar billede trumf Nybegynder
29. januar 2006 - 13:45 #2
i linksene på sorteringen linkes til samme side med ?sort=n osv.
Knapperne laver et postback. Jeg skal vel bare have den til at glemme query efter postback!
Avatar billede Syska Mester
29. januar 2006 - 13:55 #3
igen, lav kun sortering hvis det ikke er et postback

if(!IsPostback)
{
// din kode her... så laver du kun din sort her.....
}
Avatar billede trumf Nybegynder
29. januar 2006 - 14:36 #4
Det virker a h... til

knapperne kalder pagechanged og første gang siden vises, samt linksene kalder vel pageload.

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            fillData(1, 0);
        }
    }

    protected void PageChanged(object sender, userControls_selectPage.ucSelectEventArgs e)
    {
        int currentPage = e.arCurrentPage;
        fillData(currentPage, 1);
    }

    private void fillData(int currentPage, int caller)
    {
        Constants cnt = new Constants();
        Functions fcn = new Functions();

        string sortTxt = "";
        string orderBy = "";
        string sort = "";
        int dealerID = fcn.GetDealerID();
        int numResult = cnt.numResult;
        int page = currentPage;
        int totalNumItems = fcn.GetTotalNumItems("P_GetTotalNumVin", dealerID);
        int totalNumPages = fcn.GetTotalNumPages(totalNumItems, numResult);
        int startLimit = 0;
        string ShowNum = "";

        if (caller == 0)
        {
            if (Request.QueryString["sort"] != null)
                sort = Request.QueryString["sort"];
            else
                sort = "";

            if (Session["sort"] == null)
                Session["sort"] = "";

            if (Session["sortOrder"] == null)
                Session["sortOrder"] = "";

            switch (sort)
            {
                case "n":
                    sortTxt = "Sorteret alfabetisk efter navn";
                    orderBy = "v.navn";
                    break;
                case "pd":
                    sortTxt = "Sorteret alfabetisk efter producent";
                    orderBy = "p.prodname";
                    break;
                case "p":
                    sortTxt = "Sorteret efter pris";
                    orderBy = "pris";
                    break;
                case "l":
                    sortTxt = "Sorteret efter lagerstatus";
                    orderBy = "lagerstatus";
                    break;
                case "r":
                    sortTxt = "Sorteret efter datoen der sidst er rettet";
                    orderBy = "v.rettet";
                    break;
                case "ra":
                    sortTxt = "Sorteret alfabetisk efter den der sidst har rettet";
                    orderBy = "v.rettetaf";
                    break;
                default:
                    sortTxt = "Sorteret efter datoen der sidst er rettet";
                    orderBy = "v.rettet";
                    break;
            }

            if (Session["sort"].ToString() == sort && caller == 0)
            {
                this.Label1.Text = "x";
                if (Session["sortOrder"].ToString() == "ASC")
                    Session["sortOrder"] = "DESC";
                else
                {
                    Session["sortOrder"] = "ASC";
                }
            }

            Session["sort"] = sort;
        }
        else
        {
            orderBy = "v.rettet";
            sortTxt = "Sorteret efter datoen der sidst er rettet";
            sort = "";
            Session["sort"] = "r";
        }

        if (Session["sortOrder"] != null)
            orderBy += " " + Session["sortOrder"].ToString();

        this.Label1.Text += orderBy;
        ...
        ...
    }
Avatar billede trumf Nybegynder
29. januar 2006 - 18:49 #5
Altså det korte og det lange er, at Session["sortOrder"] skifter værdi selvom det ikke kan lade sig gøre efter hvad jeg kan se...
Session["sortOrder"] bliver kun sat en gang i hele koden og det er i den sidste linie af nedenstående kode. Alligevel er if (Session["sortOrder"].ToString() == "ASC") true og jeg kan se at der udskrives ->DESC på siden, hvilket vel kun kan betyde at sortorder bliver sat til ASC inden den skrives til Session["sortOrder"], eller at Session["sortOrder"] bliver tryller om :)
        .......
        if (Session["sort"].ToString() == sort && page == 1)
            {
                if (Session["sortOrder"].ToString() == "ASC")
                {
                    this.Label1.Text = "->DESC";
                    sortOrder = "DESC";
                }
                else
                {
                    this.Label1.Text = "->ASC";
                    sortOrder = "ASC";
                }
            }
            else
                sortOrder = "DESC";
        }
        else
        {
            orderBy = "v.rettet";
            sortTxt = "Sorteret efter datoen der sidst er rettet";
            sort = "r";
            sortOrder = "DESC";
        }

        orderBy += " " + sortOrder;

        Session["sort"] = sort;
        Session["sortOrder"] = sortOrder;
    ........
Avatar billede Syska Mester
29. januar 2006 - 18:53 #6
ahh, kan slet ikke lige sætte mig ind i din kode......
Avatar billede Syska Mester
29. januar 2006 - 18:55 #7
PageChanged er din egen event???

Den husker vel alle sessions etc.

Så er det vel bare at lave være med at kalde dem når du klikker på noget andet....

Well kun Load der bliver kaldt hver gang..... altså ved postback og direkte link klik.....?

// ouT
Avatar billede trumf Nybegynder
29. januar 2006 - 19:45 #8
Hey Buzzzz, jeg er ved at få ondt i hovedet af det her, så jeg lukker den. Smider du ikke et svar
Avatar billede Syska Mester
29. januar 2006 - 19:51 #9
svar
Avatar billede Syska Mester
29. januar 2006 - 19:52 #10
Hjælper altid at sove lidt på det, og tænke hvordan det ellers kan laves..... måske på en helt andet måde....

Sådan har jeg selv løst mange problemer....

// ouT
Avatar billede trumf Nybegynder
29. januar 2006 - 19:54 #11
Jo, men det virker fint, man kan bare ikke denne lille ting, og det betyder ikke det store. takker for hjælpen :)
Vi snakkes ved...
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