Avatar billede the_party_dog Nybegynder
08. december 2003 - 12:40 Der er 14 kommentarer og
2 løsninger

Datagrid sortering, 2 vejs sortering, bruger afhængigt

Jeg er en forholdsvis nybegynder i .NET og C# programmering, men føler at jeg har lidt styr på det. Mit problem er at jeg skal lave en applikation over et lager, og den bygger over en SQL database. Jeg har fået mit datagrid til at hente alt data ind fra SQL databasen via DataAdapter, DataSet og DataView, og det virker fint.

Mit problem er at jeg skal sortere min kolonner i mit datagrid, og det skal være begge veje, både Asc og Desc. Det har jeg også fået til at virke, men kun delvis.

Her er min kode til håndtering af min sortering:

private void SortColumn(object source, System.Web.UI.WebControls.DataGridSortCommandEventArgs e)
        {
            string NewSortColumn;
            string NewSortOrder;
                       
            NewSortColumn = e.SortExpression.ToString();
            NewSortOrder = "Asc";
           
            if(NewSortColumn.Equals(LastSortColumn) && LastSortOrder.Equals("Asc"))
            {
                NewSortOrder = "Desc";           
            }
           
            LastSortColumn = NewSortColumn;
            LastSortOrder = NewSortOrder;

            strSortString = NewSortColumn + " " + NewSortOrder;
            Search();
           
        }
LastSortOrder og LastSortColumn er 2 statiske string variabler, for at få dem husket, og for at bruge dem i min Search function som jeg har oprettet i min applikation.

Problemet er at når der sidder 2 bruger på min applikation, så påvirker de hinandens sorteringer. Det sker fordi at de statiske string variabler glæder hele siden, og ikke den enkelte session som brugeren er inde med. Så når en klikker på Dato i mit datagrid, så sorter den Asc i den kolonne for den bruger, men klikker den anden så lige 3 sek efter på dato, så sorter kolonnen Desc.

Det kan jeg jo ikke bruge til noget, men jeg har søgt og søgt på nettet, og har virkelig gjort et stort arbejde for at finde noget, uden held. Alle kan vise mig hvordan man får det til at virke med 2 vejs sortering, men ingen har fundet noget på det problem hvis der er 2 brugere på applikationen.

Skriv hvis der er ting som er uklare, og som skal oplyses hvis der mangler noget, for at I måske kan finde en løsning. På forhånd tak.
Avatar billede repsak Nybegynder
08. december 2003 - 13:09 #1
hmm jeg forstår ikke hvad du mener... hvad er det for en statisk string?
Avatar billede the_party_dog Nybegynder
08. december 2003 - 14:20 #2
De statiske string bruges uden for min funktion, for at holde styr på hvordan kolonnen tidligere blev sorteret. De omtalte statiske strings er LastSortColumn og LastSortOrder.

De er oprettet før page load, og husker hvordan brugeren sorterede sidst han klikkede i mit datagrid.
Avatar billede repsak Nybegynder
08. december 2003 - 15:47 #3
ok, men hvorfor dævlen skal den være statisk. Du har jo lige selv argumenteret imod din egen kode :-)
Hvis du laver en objektvariabel istedet for så har hver bruger din egen status
Avatar billede nielsbrinch Nybegynder
08. december 2003 - 17:37 #4
Nu ved jeg ikke lige hvordan de der komponenter virker, men hvis du sender noget SQL på et tidspunkt, burde du kunne sortere med den SQL, så de data du får ud af databasen allerede er sorteret.
Avatar billede repsak Nybegynder
08. december 2003 - 19:48 #5
nielsbrinch -> ja, men det smarte ved hans komponenter er vist nok, at de kan sortere data uden at lave endnu et query
Avatar billede the_party_dog Nybegynder
09. december 2003 - 07:51 #6
repsak har nemlig fat i den rigtige ende her :)

Jeg har sagt at jeg ikke har så meget styr på C# endnu, så jeg regnede med at min løsning med den statiske kunne klare det, men fandt som sagt ud af at den virkede for hele siden, og ikke for brugeren.

Repsak kan du ikke give mig et eksempel på en objektvariabel, og forklare mig hvordan den vil følge brugeren, selvom der er 3 på siden på samme tid ???
Avatar billede repsak Nybegynder
09. december 2003 - 10:15 #7
jo - en objektvariabel er bare et fint ord for det du sikkert allerede kender:

class Test{
  string objektvariabel = "Hej";
  static string klassevariabel = "Hej";
}

(og lidt pseudokode)

bruger 1:
objektvariabel = "bruger1"
klassevariabel = "bruger1"

bruger2
udskriv objektvariabel (den udskriver "hej")
udskriv klassevariabel (den udskriver "bruger1")

Kan du se hvad jeg mener. En klasse variabel (statisk) er fælles for alle. Mens objektvariabel er individuel
Avatar billede the_party_dog Nybegynder
09. december 2003 - 10:16 #8
Hey! Jeg fandt en løsning som jeg har testet, og jeg kan leve med, ved bare ikke om den er 100% korrekt.

private void SortColumn(object source, System.Web.UI.WebControls.DataGridSortCommandEventArgs e)
        {
            string NewSortColumn;
            string NewSortOrder;
                       
            NewSortColumn = e.SortExpression.ToString();
            NewSortOrder = "Asc";
           
            if(NewSortColumn.Equals(Session["LastSortColumn"]) && Session["LastSortOrder"].Equals("Asc"))
            {
                NewSortOrder = "Desc";
            }
           
            Session["LastSortColumn"] = NewSortColumn;
            Session["LastSortOrder"] = NewSortOrder;

            Session["strSortString"] = NewSortColumn + " " + NewSortOrder;
                Search();
           
           
        }

Search er min funktion som brugerne bruger når de søger efter noget i min database, og Session["strSortString"] er så den string jeg bruger til at sortere mit datagrid med.
Avatar billede repsak Nybegynder
09. december 2003 - 10:20 #9
tjoe, men hvorfor bruge Sessions???
Avatar billede the_party_dog Nybegynder
09. december 2003 - 10:24 #10
tja, det ved jeg ikke, men det virker jo som jeg ønsker. Som jeg lærte en gang er der mange løsninger på samme spørgsmål, og din måde er sikkert mere korrekt rent programmerings mæssigt end min. Men jeg vil sætte mig ned og se om jeg kan bruge dit til noget, skal lige gennemskue det hele.
Avatar billede repsak Nybegynder
09. december 2003 - 10:38 #11
Man kan jo lige så godt lave det 'rigtigst' fra start af ;-)
Avatar billede the_party_dog Nybegynder
09. december 2003 - 10:42 #12
Det har du fuldstændig ret i, det nytter ikke noget at lave noget lorte kode. Men hvor forkert af det af mig at bruge Sessions variabler? Set i forhold til min tidligere statiske variabel, som var global? :)
Avatar billede repsak Nybegynder
09. december 2003 - 13:53 #13
statisk variabel i denne situation er en katastrofe, men det har du vel fundet ud af ;-)
Normalt bruger man sessions til at gemme oplysninger på tværs af sider.
Avatar billede the_party_dog Nybegynder
09. december 2003 - 13:57 #14
Jeps, den har jeg lige regnet ud, fordi jeg er gået igang med at lege med data mellem siderne. Men så det er ikke så slemt at lave en sessions variabel, som det er med en statisk global?

Jeg har endnu ikke sat mig ned at prøvet dit svar med objekt variablerne endnu, men det kommer nok hen af vejen. Hvis du får 60 points, er du så tilfreds? Jeg fandt jo en løsning selv, inden jeg havde læst din, men selvfølgelig skal du have noget for tid.
Avatar billede repsak Nybegynder
09. december 2003 - 14:03 #15
1) Sessions var er ikke slemt overhovedet - sessions er sejt. Statisk er også sejt, bare ikke lige til det her
2) ja, det er op til dig :-) (jeg er ikke så fokuseret på points)
Avatar billede the_party_dog Nybegynder
09. december 2003 - 14:07 #16
Jeg mener bare at ret skal være ret. Du kom med hjælpende hånd, men det var bare ik lige den afgørende hjælp, efter som jeg selv fik løst det. Måske ikke perfekt, men løst :) Mange tak for din tid, hav en forsat god dag :)
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