Wenn eine Datentabelle viele Sätze (möglicherweise tausende Datensätze) enthält, wird es schwierig, sie im datengebundenen DatagridView (DGV) anzuzeigen. Virtualmode scheidet wegen der Datengebundenheit aus. Wenn man dann noch die Eigenschaft DGV.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells anwenden möchte, wird es noch schwieriger. Ich löse das folgendermaßen; das soll aber nur eine Anregung für weitere Ideen sein: Voraussetzung sind eine Datentabelle (eventuell SQL), eine Form mit DGV, ein BindingNavigator-Control, ein BindingSource-Komponente und ein bisschen Code. Zunächst auf der Form das DGV (dgTabelle als SQL-Tabelle) und BindingNavigator (Navigator1) platzieren, BindingSource (bsTabelle) der Form hinzufügen. Prinzip der Datenorganisation ist: Die Datentabelle in ein Dataset füllen, die DataSource von bsTabelle als die Datentabelle festlegen, die DataSource des dgTabelle als auch die DataSource de Navigators mit bsTabelle definieren. Definieren von rowConst als eine Konstante, die die anzuzeigende Satzanzahl im DGV vorgibt. In die SELECT-Anweisung der Datentabelle füge ich ein: RANK() OVER (ORDER BY idfeld) As rowNum Wobei idfeld ein beliebiges, sortierfähiges Feld der Datentabelle ist. Mittels diesem SELECT wird die Datentabelle ins DataSet gefüllt. Danach die DataSourcen wie oben beschrieben festlegen. Die wichtigste, zu vereinbarende Variable ist rowConst, die die anzuzeigende Anzahl von Datensätzen wiedergibt. Zwei Variable firstRow und lastRow sind die beiden Integer-Variablen, die in der Folge stets berechnet werden für die Filterung von bsTabelle nach rowNum mittels bsTabelle.Filter = "rowNum >= " & firstRow & " AND rowNum <= " & lastRow. Wie diese zwei Variablen berechnet werden, zeige ich unten. Der Navigator1 wird folgendermaßen benutzt: AddHandler nextG.Click, AddressOf nextGC AddHandler prevG.Click, AddressOf prevGC AddHandler toEnd.Click, AddressOf toEndC AddHandler toTop.Click, AddressOf toTopC und mit den zugehörigen Prozeduren Private Sub nextGC(sender As Object, e As EventArgs) ' nächste Gruppe firstRow += rowConst lastRow = firstRow + rowConst - 1 changeDatagridData() nextG.Enabled = (lastRow < anzRows) toEnd.Enabled = (lastRow < anzRows) End Sub Private Sub prevGC(sender As Object, e As EventArgs) ' vorherige Gruppe firstRow -= rowConst : lastRow -= rowConst changeDatagridData() prevG.Enabled = (firstRow <> 1) toTop.Enabled = (firstRow <> 1) End Sub Private Sub toEndC() 'zum letzten Satz der Gruppe firstRow = diff * rowConst lastRow = firstRow + rowConst changeDatagridData() End Sub Private Sub toTopC() 'zum ersten Satz der Gruppe firstRow = 1 lastRow = rowConst changeDatagridData() End Sub Die Prozedur changeDatagridData realisiert das Aktualisieren der anzuzeigenden Datensätze gemäß Filter des bsTabelle: Private Sub changeDatagridData() With bsTabelle .DataSource = Nothing .DataSource = ds.Tables(myTableName) .Filter = "rowNum >= " & firstRow & " AND rowNum <= " & lastRow .ResetBindings(False) End With End Sub Noch zu bemerken wäre, dass man die Eigenschaften des DGV vor changeDatagridData auf dgTabelle.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None dgTabelle.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.None setzt. Erst wenn der Filter angewendet wurde kann man sie auf dgTabelle.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells dgTabelle.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells setzen. Viel Erfolg mit dieser Methode! Dieser Tipp wurde bereits 3.237 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
vb@rchiv CD Vol.6 Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! Online-Update-Funktion Entwickler-Vollversionen u.v.m. Tipp des Monats September 2024 Dieter Otter Übergabeparameter: String oder Array? Mit der IsArray-Funktion lässt sich prüfen, ob es sich bei einem Übergabeparameter an eine Prozedur um ein Array oder einer "einfachen" Variable handelt. sevAniGif (VB/VBA) Anzeigen von animierten GIF-Dateien Ab sofort lassen sich auch unter VB6 und VBA (Access ab Version 2000) animierte GIF-Grafiken anzeigen und abspielen, die entweder lokal auf dem System oder auf einem Webserver gespeichert sind. |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |