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.341 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. |
sevISDN 1.0 Überwachung aller eingehender Anrufe! Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Tipp des Monats Dezemeber 2024 Roland Wutzke MultiSort im ListView-Control Dieses Beispiel zeigt, wie sich verschiedene Sortierfunktionen für ein ListView Control realisieren lassen. Neu! sevEingabe 3.0 Einfach stark! Ein einziges Eingabe-Control für alle benötigten Eingabetypen und -formate, inkl. Kalender-, Taschenrechner und Floskelfunktion, mehrspaltige ComboBox mit DB-Anbindung, ImageComboBox u.v.m. |
||||||||||||||||
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. |