CRS Webbproduktion
Webbproduktion när den är som bäst

Smartare användning av List

september 24, 2008 08:05 by Admin

Det var länge sedan jag skrev något om ASP.NET i bloggen nu, jag har varit upptagen med diverse experiment osv.

Nu tänkte jag berätta om ett nytt sätt att använda List<T> på. Eller nytt och nytt, det är nytt för mig iallafall.

Jag jobbar mycket med egna objekt, och listor av dessa, istället för DataTable och liknande. Färdiga SqlDataSource-kontroller går helt bort, där tappar man ju all kontroll.
När man jobbar med listorna, så ligger ju dessa under System.Collections.Generic.List<T> och returnerar jag en List<T> så måste jag ha med using System.Collections.Generic på sidan där jag ska använda mina listor.

Detta är ju i sig inget problem, men jag har fått tips om att göra en egen klass för detta istället. Klassen är mycket enkel, och ser ut så här:

public class ObjectCollection : System.Collections.Generic.List<Object>
{ } 

Det är allt faktiskt.
Sedan kan man också, vilket jag ofta gjort på sista tiden, utöka klassen med en funktion för att fylla samlingen från en reader.

public class ObjectCollection : System.Collections.Generic.List<Object>
{
        public ObjectCollection (System.Data.IDataReader reader)
        {
            while (reader.Read())
            {
                this.Add(new Object((int)reader[0], reader[1] as string));
            }
            reader.Close();
        }
}

Det gäller bara att se till att readern man skickar in faktiskt innehåller rätt data. En felhantering för detta vore kanske inte fel, men den får du implementera själv


Kommentarer

september 25. 2008 23:48

Peter

Fint att se dessa användbara c#-snippets igen!

Skulle du kunna visa hur man hämtar data och lägger till den i en DataReader m.h.a. Custom Collections i sitt affärslager? Det är ett bra sätt att lära sig skriva rätt och snygg kod. Och få användare inklusive jag att sluta använda sig av bl.a. DataTable och DataSet.

Utgå från att användaren redan har ett Data Access Layer och hämtar data på följande vis:

public string GetUsername(int userId)
{
MySqlCommand cmdGetUsernameByID = new MySqlCommand("SELECT _Username FROM tblMembers WHERE _UserID = ?UserID");

cmdGetUsernameByID.Parameters.Add("?UserID", MySqlDbType.Int32).Value = userId;

return DataAccessLayer.ExecuteScalar(cmdGetUsernameByID);

// Skapa DataReader här och lägg till värdena i den collection som man sedan presenterar datan ifrån.
}

Det vore utmärkt om du kunde skriva nåt enkelt exempel så man förstod. För det är så många som gör fel och vill ha en enkel, strukturerad och snygg lösning. Du kanske har en annan som är bättre?

Tack för en bra bloggpost!

Peter

september 26. 2008 09:24

Stefan

Hej Peter!

Vad roligt att du uppskattar mina poster, och bara därför har jag skrivit en beskrivning på det du efterfrågar.

Hoppas jag förstod dig rätt, och att du förstår vad jag skriver.

Jag har lagt in direktlänken som min hemsida i detta svar.

Stefan

Lägg till kommentar




  Country flag

biuquote
  • Kommentar
  • Live överblick
Loading