czwartek, 29 września 2011

Problem z powolnym działaniem kontrolki dataGriedVIew


Przedstawione rozwiązanie dotyczy problemu związanego z kontrolką WindowsForms – dataGridView.

Wiązanie danych z baz SQL-owych (Binding data) do kontrolki dataGridView przy dużej ilości rekordów powoduje spore opóźnienie podczas ładowania danych dochodzące do nawet kilkudziesięciu sekund oraz duże spowolnienie działania samej kontrolki np. brak płynności podczas przewijania tabeli z danymi.

Rozwiązaniem tego problemu jest dodanie podwójnego buforowania danych.
W tym celu należy dodać nową statyczną klasę do swojej aplikacji, którą nazywamy np. DoubleBuffer edGridView().

Klasa przedstawia się następująco:

using System;
using System.Text;
using System.Reflection;
using System.Windows.Forms;

namespace DziennikKancelaryjny // Wpisujemy swoją przestrzeń nazw
{
    public static class DoubleBufferedGridView
    {
        public static void DoubleBuffered(this DataGridView datagridview, bool set)
        {
            Type datagridviewType = datagridview.GetType();
            PropertyInfo propertyinf = datagridviewType.GetProperty("DoubleBuffered", BindingFlags.Instance | BindingFlags.NonPublic);
            propertyinf.SetValue(datagridview, set, null);
        }
    }
}

Następnie dodajemy nasze buforowanie dla docelowego dataGriedView tak, aby wywoływało się podczas uruchamiania aplikacji: 

dataGridView1.DoubleBuffered(true); 

To wszystko :) Od teraz możesz się cieszyć szybkim ładowanie swojej kontrolki w około 1 sekundę ;)

Rozwiązanie jest banalne, a o ile ułatwia życie.

Brak komentarzy:

Prześlij komentarz