Avatar billede balstrup Nybegynder
24. november 2004 - 10:12 Der er 10 kommentarer og
1 løsning

Global variabel i ASP.NET med C#

Jeg har lavert en side der genererer en brugerflade ud fra indholdet af en datatable.
Ved Page_Load opretter jeg en instans af DataTable.
Herefter vælger jeg noget data i databasen, der sørger for at give mig den DataTable jeg skal bruge. Dette sker ved at trykke en knap på brugerfladen.
Nu bliver der kaldt en funktion der genererer brugerflade ud fra indholdet af den indlæste DataTable. Brugerfladen er et spørgeskema.
So far so good!

Nu sker det problemfyldte.

Jeg skal nu fylde noget i spørgekemaet og gemme dette i min DataTable igen.
Når jeg trykker på knappen gem kommer der en fejlmeddelelse der antyder at min DataTable er forsvundet.

Den siger: Object reference not set to an instance of an object.

Alt peger på at det er min DataTable der er forsvundet.

Mit spørgsmål er nu, hvordan bevarer jeg min DataTable, som en global variabel, så jeg kan bruge den i alle mine funktioner på siden?
Al databehandlingen foregår i C#.
Avatar billede nielsbrinch Nybegynder
24. november 2004 - 10:17 #1
Du kan gemme din DataTable i session
Avatar billede balstrup Nybegynder
24. november 2004 - 10:59 #2
OK!
Hvordan gøres dette??
Jeg er ret ny til ASP.NET og ASP i det hele taget;-)
Avatar billede nielsbrinch Nybegynder
24. november 2004 - 15:00 #3
Sådan lægger du den i session:
Session["minDataTable"] = dataTable;

Sådan tager du den ud af Session:
DataTable dataTable = (DataTable)Session["minDataTable"];

Vil du være sød aldrig at nævne ASP og ASP.NET i samme sætning igen - de to ting har ikke noget med hinanden at gøre ;-)
Avatar billede balstrup Nybegynder
24. november 2004 - 20:39 #4
Det skal jeg nok!-)
Jeg har prøvet at bruge Session nu, men det ser ikke ud til at virke!-(

Den kommer stadig med fejlmeddelelsen fra før!!
Avatar billede nielsbrinch Nybegynder
25. november 2004 - 00:23 #5
I starten af Page_Load skal du hente DataTable fra Session.

Hver gang du ændrer din DataTable, skal du også gemme den i Session.

Når du starter skal den også være i session. Lav en kode lignende følgende i toppen af din Page_Load:

if (Session["minDataTable"] == null)
{
  Session["minDataTable"] = dataTable
}
else
{
  dataTable = (DataTable)Session["minDataTable"];
}
Avatar billede balstrup Nybegynder
25. november 2004 - 12:38 #6
Jeg har prøvet det du foreslår.
MEN...når jeg trykker på knappen gem, og dermed kalder den dertilhørende funktion er (DataTable)Session["datatable"] tom. Jeg prøver at udlæse rækkerne og den har nul rækker.
Hvis jeg derimod udskriver (DataTable)Session["datatable"] i den funktion hvor jeg får fyldt min DataTable har den fire rækker.
Det virker som om Session["datatable"] forsvinder når jeg ryger ud af hent-funktionens context.
Er det fordi session blot holder er en reference til min datatable og jeg derfor skal lave en copy istedet for blot at sætte den lig med???
altså noget ala:

Session["datatable"] = dataTable.Copy();
Avatar billede balstrup Nybegynder
25. november 2004 - 13:03 #7
Af uforklarlige årsager er det begyndt at virke....!!!!!!
Jeg tilføjede en knap så jeg uanset hvornår jeg var i min web-session kunne udlæse min dataTable og nu virker det!!!!

Så du må jo hellere få nogle point;-)
Smider du et svar????
Avatar billede balstrup Nybegynder
25. november 2004 - 14:18 #8
Lige et tillægsspørgsmål!!!
Jeg genererer spørgeskemaet på run-time i et Panel.
Når jeg vil hente data ud af de genererede textboxe har jeg mistet referencen til dem.
Jeg har prøvet at lægge dette panel i Session, men der gemmer den dem uden det indtastede. Kan jeg gøre noget for at kunne få fat i det indtastede??
Avatar billede nielsbrinch Nybegynder
25. november 2004 - 14:39 #9
Dine tekstbokse bliver under alle omstændigheder submitted, og hvis du ikke kan få .NET til at håndtere det automatisk, fordi du genererer dine tekstbokse, kan du altid hente værdierne ud fra din Request.Form collection. Den kan du simpelt hen gennemløbe og få samtlige værdier ud - inklusive dem du egentligt ikke skal bruge.
Avatar billede nielsbrinch Nybegynder
25. november 2004 - 14:39 #10
og så det der svar ...
Avatar billede balstrup Nybegynder
25. november 2004 - 22:49 #11
Tak skal du have!
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