C# WPF – DataGrid – ScrollEvent

Wer viel mit dem DataGrid arbeitet, stößt schon oft an neue Herausforderung.
Nicht alles ist selbstverständlich oder leicht zu handhaben.

Neulich habe ich eine Freitextsuche in ein Programm integriert, was jede einzelne Zelle markiert, die den Suchtext enthält. Beim DataGrid spielt allerdings die Virtualization Eigenschaft eine große Rolle.

Ich hatte für den Test EnableRowVirtualization genutzt.

Mit deaktivierter Virtualisierung vom DataGrid wird das Ganze mit vielen Daten sehr langsam und beschränkt sich auf den sichtbaren Bereich im Grid. Man kann natürlich ein AutoScroll einbauen, was dann zwar automatisch scrollt, allerdings auch nicht die schnellste Lösung ist.

Bei aktiver Virtualisierung hingegen läuft alles schnell, jedoch wird beim Scrollen die Markierung der Zelle verschoben. Plötzlich ist also eine andere Zelle markiert.

Ich habe hier einen Trick angewandt und einfach bei jedem Scrollen die Methode zur Zellenmarkierung aufgerufen. Funktioniert sehr gut. Die Zellen werden alle neu markiert.

Was ist dafür notwendig?

WPF-Code:

..DataGrid Name="meinDataGrid" 
     ScrollViewer.ScrollChanged="DGrid_ScrollEvent" />

C#-Code:

private void DGrid_ScrollEvent(object sender, ScrollChangedEventArgs e)
{
   // Wenn im DataGrid gescrollt wird, erscheint eine Messagebox, 
   // die euch das Scrollverhalten anzeigt.
   MessageBox.Show("Horiz.: " + e.HorizontalChange 
                    + " | Verti.: " + e.VerticalChange);

   //  Wer auf Horizontal bzw. Vertical Scroll prüfen möchte, nutzt einfach 
   //  if (e.HorizontalChange != 0) bzw. if (e.VerticalChange != 0)    
}

Schreibe einen Kommentar

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.