webForumDet fria alternativet

tömma datalist

.NETur .NET

3 svar · 372 visningar · startad av Cale

Medlem sedan mars 200490 inlägg
Frågan#1

jag hämtar data ur en databas för att fylla en datalist med info om klickat datum i en kalender..
jag vill att datalisten ska bli tom när man väljer ett datum som inte innehåller nån info..

den här koden körs om inget hämtas ur databasen när man klickar på ett datum:

Datalist.Dispose
Datalist.DataBind()

är det rätt att göra så?
finns det en enklare lösning?

Medlem sedan maj 20012 812 inlägg
#2

Datalist.Dispose
Datalist.DataBind()

Du kan inte först göra en Dispose på ett objekt och sedan därefter accessa det igen, du kan men det finns ingen mening.

När du gör en dispose så är det meningen att objektet skall "rensa upp eftersig" genom att frigöra minne och stänga alla kopplingar till filsystem/databaser/andra saker som du har använt i ditt objekt. Samt att de flesta Dispose() methoder berättar för GC att den själv har hanterat frigöringen av minnet och därför slipper GC hantera det.

Om du sedan gör en DataBind() på objektet så förstör du allt det som du gjort i Dispose() och har du otur så kan du råka ut för andra konstigheter...

Det du vill göra istället är helt enkelt att sätta din DataSource till null.

Datalist.DataSource = null;

Detta fungerar utmärkt i en winform applikation, när du är i en ASP.NET applikation så är det lite annorlunda, och det beror på att DataListen återskapas vid varje sidaanrop, vilket betyder att din DataSource kommer redan att vara null, så om du sätter den till null igen så händer inte så mycket. (Det har att göra med hur ASP.NET hanterar postbacks).

Så här har du nu 2 alternativ.

1. Du sätter din DataSource till ett tomt object:

DataList.DataSource = new string[]{};

2. Du tömmer de items som redan finns inlagda i listan

DataList.Items.Clear();

Alternativ 2 hade jag föredragit.

Det finns ett 3 alternativ som man kan använda men som kommer ge dig mer problem än vinst och det är att du på din DataList sätter EnableViewstate till false. Det betyder att ASP.NET inte kommer hålla koll på vad som händer i din DataList mellan postbacksen. Det är dock något du bara bör göra om du förstår vad som händer och vilka problem det kan ge dig senare när du försöker använda dig av DataList datan.

- M

Medlem sedan mars 200490 inlägg
#3

tackar :)

jag misstänkte att det skulle vara nåt med "clear" men jag hittade inget..
jag brukar leta på msdn.com men har svårt att hitta rätt där :(
att "dispose" var fel kände jag på mig..

mvh alex

Medlem sedan mars 200490 inlägg
#4

dessvärre får jag kompilatorfelet..
"Clear är inte en medlem av System.Web.UI.WebControls.DataListItemCollection."

clear funkade på datasetet:

dataset1.Clear()
datalist1.DataBind()
129 ms totalt · 3 externa anrop · v20260731065814-full.b746b907
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)