vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevDataGrid - Gönnen Sie Ihrem SQL-Kommando diesen krönenden Abschluß!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
Datagrid: Spaltenbreite optimal einstellen incl. Header 
Autor: Ford Prefect
Datum: 01.08.05 14:26

Hallo zusammen,

ich habe mir mal was zusammengebastelt. Es geht darum die Spaltenbreite eines Datagrid in Abhängigkeit des Inhaltes und der Spaltenüberschrift optimal einzustellen. Funktionieren tut es, aber ich frage mich, ob ich das nicht zu umständlich programmiert habe. Insbesonder im Bezug auf die Ermittlung der Zeilen- und Spaltenanzahl.
Falls Ihr Anregungen oder Vorschläge habt, wäre ich sehr dankbar.

Hier der Code:

Public Class MeasurementDatagrid
 
    Private Shared mySpaltenbreiten() As Integer        'Array für die 
    ' Spaltenbreiten
    Private Shared myLength As Integer                  'Länge des Array
 
    Public Shared Sub BerechnenSpaltenbreiten(ByRef Datenfeld As DataGrid)
 
        'Verwendete Variablen
        Dim x As Integer = 0                            'Anzahl der Spalten
        Dim y As Integer = 0                            'Anzahl der Zeilen
        Dim i As Integer = 0                            'Laufvariabel
        Dim LetzteZeileErreicht As Boolean = False      'ja wenn Zeilenende 
        ' erreicht
        Dim LetzteSpalteErreicht As Boolean = False     'ja wenn Spaltenende 
        ' erreicht
        Dim s As String                                 'nimmt den Text aus 
        ' einem Datenfeld des Datagrids auf
        Dim g As Graphics = Datenfeld.CreateGraphics    'zur Umrechnung der 
        ' Textbreite in Integer benötigt
        Dim f As Font = Datenfeld.Font                  'der Font des Datagrids
        Dim size As SizeF                               'Speicher für die 
        ' Breite des Textes
 
        'Feststellen, wieviele Spalten in Datagrid vorhanden sind
        While Not LetzteSpalteErreicht
            Try
                s = Datenfeld.Item(x, y).ToString       'nur um über Fehler die 
                ' letzte Spalte zu ermitteln
                ReDim Preserve mySpaltenbreiten(y)      'Arraygröße anpassen
                mySpaltenbreiten(y) = 0                 'initialisieren
                y += 1                                  'nächste Spalte
            Catch ex As Exception
                LetzteSpalteErreicht = True             'Abbruchbedingung setzen
                y -= 1                                  'wieder einen zurück, 
                ' da der Wert nun eins zu hoch ist
                myLength = y                            'Wert zu auslesen 
                ' bereitstellen
            End Try
        End While
 
        'Die Spaltenbreiten der einzelnen ColumnHeader ermitteln
        Dim dgt As DataGridTableStyle
        For Each dgt In Datenfeld.TableStyles
            Dim dgc As DataGridColumnStyle
            For Each dgc In dgt.GridColumnStyles
                s = dgc.HeaderText
                size = g.MeasureString(s, f)
                mySpaltenbreiten(i) = CInt(size.Width)
                i += 1
            Next
        Next
 
        'Alle Zeilen und alle Spalten des Datagrid durchlaufen und optimale 
        ' Spaltenbreite 
        'für jede Spalte ermitteln
        While Not LetzteZeileErreicht
            Try
                For i = 0 To y
                    s = Datenfeld.Item(x, i).ToString()             'Spalten 
                    ' und Zeilen durchlaufen
                    size = g.MeasureString(s, f)                    'Größe 
                    ' ermitteln
                    If CInt(size.Width) > mySpaltenbreiten(i) Then  'merken, 
                    ' wenn in diesem Datenfeld
                        mySpaltenbreiten(i) = CInt(size.Width)      'ein Wert 
                        ' auftritt, der größer ist
                    End If                                          'alls in 
                    ' allen anderen
                Next
                x += 1                                              'nächste 
                ' Zeile
 
            Catch ex As Exception
                LetzteZeileErreicht = True                          _
                  'Abbruchbedingung
            End Try
        End While
 
        'Die Spaltenbreiten in die TableStyles einsetzen
        i = 0
        For Each dgt In Datenfeld.TableStyles
            Dim dgc As DataGridColumnStyle
            For Each dgc In dgt.GridColumnStyles
                dgc.Width = mySpaltenbreiten(i)
                i += 1
            Next
        Next
 
    End Sub
 
End Class
Vorher müssen die GridColumnStyles für die einzelnen Zeilen erstellt und über ein DataGridTableStyle dem Datagrid hinzugefügt werden. Dann aufrufen über

MeasurementDatagrid.BerechnenSpaltenbreiten(Me.Datagrid1)
---

Die Antwort auf die Frage nach dem Leben, dem Universum und dem ganzen Rest ist und bleibt 42!

alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Datagrid: Spaltenbreite optimal einstellen incl. Header8.863Ford Prefect01.08.05 14:26
Re: Datagrid: Spaltenbreite optimal einstellen incl. Header5.523Micke01.08.05 17:46
Re: Datagrid: Spaltenbreite optimal einstellen incl. Header5.326Ford Prefect02.08.05 09:15
Re: Datagrid: Spaltenbreite optimal einstellen incl. Header5.429Micke02.08.05 12:05
Re: Datagrid: Spaltenbreite optimal einstellen incl. Header5.338Ford Prefect03.08.05 12:08
Re: Datagrid: Spaltenbreite optimal einstellen incl. Header5.452Micke03.08.05 13:03

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
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.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel