C# - Web DataGrid

DataGrid 7. rész

forráskód letöltése
Mostani cikkben egy olyan speciális módszert választunk a DataGrid adatokkal való feltöltésére, mely igen nagy méretű adathalmazok gyors kezelését teszi lehetővé.
Ennek megvalósításához ún. virtuális darabszámot adunk meg a DataGrid részére, hogy hány sort kell megjelenítenie. A megjelenítéshez természetesen használjuk a múlt héten ismertetett lapozás technikát, hiszen több száz soros táblázat megjelenítésének meg nem sok értelme lenne egy web oldalon.
Azt mondjuk tehát a DataGrid-nek, hogy van ezer sora, de ebből mindig csak annyival kell foglalkoznunk, mely ténylegesen meg is jelenik az adott lapon. Így ha adataink mondjuk egy adatbázisból történő lekérdezés során jutnának el a DataGrid-hez, akkor is csak elegendő lenne egy lapnyi sorokat mozgatni és nem a teljes adathalmazt. Ennek ellenére a felhasználó a DataGrid viselkedése alapján észre sem veszi, hogy most más módon jut az egyes lapokhoz és ezáltal az adatokhoz.
Hasonlóan a múlt héten bemutatott megoldáshoz, most is készítünk tehát egy olyan DataGrid-et, melyben az adat sorok több lapra osztva jelennek meg. Újdonság most annyi lesz, hogy az AllowCustomPaging property-t is igazra állítjuk. Ezzel engedélyezzük annak lehetőségét, hogy virtuális sorokat használjunk, melyeket valójában nem kell megadnunk a DataGrid-nek az adatforrásban.
    private void Page_Load(object sender, System.EventArgs e)
    {
      if (!IsPostBack)
      {
Hogy virtuálisan hány sora legyen a DataGrid-nek, azt a VirtualItemCount property-ben adhatjuk meg. Ettől kezdve a DataGrid úgy viselkedik, mintha ennyi sor lenne a számára megadott adatforrásban. Ennek ellenére persze elegendő lesz mindig annyi sort megadni, amennyi valójában megjelenik a DataGrid egy oldalán.
        DataGrid1.VirtualItemCount=1000; 
        DataGrid1.DataSource = CreateDataView(1);
        DataGrid1.DataBind();              
      }      
    }
Az adatok generálását a CreateDataView függvényünkre bízzuk. Ennek paraméterként át kell majd mindig adni, hogy a DataGrid-ben megjelenő első sor valójában hányadik adat sort kell hogy tartalmazza.
    private DataView CreateDataView(int start) 
    {
    ...
Így az adatok generálásakor elegendő a ciklusmagnak annyiszor futnia, ahány elem egyszerre elfér a DataGrid egy lapján.
      for (int i=0; i<DataGrid1.PageSize; i++)
      {
        row = dt.NewRow();
Hogy ez valójában hányadik sora lesz az adathalmaznak, azt a ciklus változó, illetve a kiindulási érték együtt határozza meg.
        row[0] = i + start;
        ...
    }
Ha a felhasználó lapozza a DataGrid-et, akkor épp úgy a PageIndexChanged eseményt kell felhasználnunk, mint a múltkori cikkben.
    private void DataGrid1_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
    {
      DataGrid1.CurrentPageIndex = e.NewPageIndex;
Itt az új adathalmaz generálásához meg kell határoznunk, hogy melyik lesz az adathalmaz első sora. Ezt egy egyszerű számítással megtehetjük:
      DataGrid1.DataSource = CreateDataView(e.NewPageIndex * DataGrid1.PageSize + 1);
      DataGrid1.DataBind();              
    }

DataGrid cikksorozat