MoreDefensiveDatasource

19.04.2007  |  Gunnar

Eelmise kuu lõpus sai kirjutatud DefensiveDatasource klassist, mille abil saab ASP.NET-i GridView siduda kollektsioonidega, mis sisaldavad samal baasklassil põhinevaid erinevait tüüpi objekte. Andmete jagamine lehtedeks GridView-s aga ei õnnestu, sest tuleb veateade "The data source does not support server-side data paging".

Probleemile on lihtne lahendus. DefensiveDatasource-i baasil tuleb luua uus klass, mis järgib ICollection interface-i. Et meil peab DefensiveDatasource tegelema ainult IList tüüpi kollektsioonidega, siis piirasin uue klassi kollektsioonide valiku nii, et klassile saab algseks kollektsiooniks ette anda ainult IList põhiseid kollektsioone.

Laiema kollektsioonide toe jaoks soovitan siiski teha nii, et piiranguks on ICollection interface.

/// <summary>
/// Laiendab DefensiveDatasource klassi ICollection interface-i
/// toega.
/// </summary>
public class MoreDefensiveDatasource : DefensiveDatasource, ICollection
{
    private IList list;

    /// <summary>
    /// Klassi konstruktor. Initsialiseerib sisemise listi ning
    /// annab baasklassi konstruktorile edasi initsialiseerimiseks
    /// vajalikud argumendid.
    /// </summary>
    /// <param name="innerSource">Andmeid sisaldav loend.</param>
    /// <param name="propertyFilter">Loend omaduste nimedega.</param>
    public MoreDefensiveDatasource(IList innerSource, IDictionary
        propertyFilter)
        : base((IEnumerable)innerSource, propertyFilter)
    {
        this.list = innerSource;
    }
    /// <summary>
    /// Tagastab andmete loendi elementide arvu.
    /// </summary>
    int ICollection.Count
    {
        get { return list.Count; }
    }
    /// <summary>
    /// Kopeerib käesolevasse loendisse sisendmassiivi elemendid alates
    /// antud indeksist.
    /// </summary>
    /// <param name="array">Sisendmassiiv.</param>
    /// <param name="index">Indeks, millest alates elemente
    /// kopeeritakse.</param>
    void ICollection.CopyTo(Array array, int index)
    {
        this.list.CopyTo(array, index);
    }
    /// <summary>
    /// Tagastab tõese väärtuse kui loendile on sünkroniseeritud
    /// juurdepääs.
    /// </summary>
    bool ICollection.IsSynchronized
    {
        get { return this.list.IsSynchronized; }
    }
    /// <summary>
    /// Tagastab objekti, mille abil saab käesolevat loendit
    /// sünkroniseerida.
    /// </summary>
    object ICollection.SyncRoot
    {
        get { return this.list.SyncRoot; }
    }
}

Kommenteeri

sulge
Saada link e-postiga

© DT 2012 | Creative Commons Attribution-Noncommercial 3.0 License | WordPress