Die Community zu .NET und Classic VB.
Menü

Tipp-Upload: VB.NET 0424: DatagridView Header Spalten verbinden

 von 

Über den Tipp  

Dieser Tippvorschlag ist noch unbewertet.

Der Vorschlag ist in den folgenden Kategorien zu finden:

  • Listensteuerelemente

Dem Tippvorschlag wurden folgende Schlüsselwörter zugeordnet:
Datagridview,Grafik

Der Vorschlag wurde erstellt am: 14.01.2012 07:10.
Die letzte Aktualisierung erfolgte am 14.01.2012 07:29.

Zurück zur Übersicht

Beschreibung  

im DatagridviewHeader Spalten mit einer Überschrift verbinden

Januar Februar
Anzahl Wert Anzahl Wert

Schwierigkeitsgrad

Schwierigkeitsgrad 2

Verwendete API-Aufrufe:

Download:

Download des Beispielprojektes [5,28 KB]

' Dieser Source stammt von http://www.activevb.de
' und kann frei verwendet werden. Für eventuelle Schäden
' wird nicht gehaftet.

' Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
' Ansonsten viel Spaß und Erfolg mit diesem Source!
'
' Beachten Sie, das vom Designer generierter Code hier ausgeblendet wird.
' In den Zip-Dateien ist er jedoch zu finden.

' ----- Anfang Projektdatei DGV_SpaltenVerbinden.vbproj  -----
' ------------------ Anfang Datei Form1.vb  ------------------
' ------------------------------------------
'  im Datagridview Header Spalten verbinden
'
'  system   VB2005
'  autor    peter.k.sauer@web.de
'  created  14.01.2012
'  update   14.01.2012
' ------------------------------------------

Public Class Form1

    Private _DataGridViewIsInit As Boolean = False

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _
        Handles MyBase.Load

        DataGridViewInit()

    End Sub

#Region "DataGridView1 Ereignisse "

    Private Sub DataGridView1_Paint(ByVal sender As Object, ByVal e As _
        System.Windows.Forms.PaintEventArgs) Handles DataGridView1.Paint

        DataGridViewPaintHeader(DataGridView1)

    End Sub

    Private Sub DataGridView1_Scroll(ByVal sender As Object, ByVal e As _
        System.Windows.Forms.ScrollEventArgs) Handles DataGridView1.Scroll

        If _DataGridViewIsInit Then
            DataGridViewPaintHeader(DataGridView1)
        End If

    End Sub

    Private Sub DataGridView1_SizeChanged(ByVal sender As Object, ByVal e As _
        System.EventArgs) Handles DataGridView1.SizeChanged

        If _DataGridViewIsInit Then
            DataGridViewPaintHeader(DataGridView1)
        End If

    End Sub

#End Region

    ''' <summary>
    ''' Datagridview einrichten und Spalten anlegen
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub DataGridViewInit()

        With DataGridView1
            .Columns.Clear()
            .ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing
            .ColumnHeadersHeight = .ColumnHeadersHeight * 5 \ 2

            For i As Integer = 1 To 12

                Dim HeaderText As String() = {"Anzahl", "Wert"}
                Dim HeaderName As String() = {"Anz", "Wert"}

                For j As Integer = 0 To 1

                    Dim CH As New DataGridViewTextBoxColumn

                    CH.CellTemplate.Style.Format = "#"
                    CH.CellTemplate.Style.Alignment = DataGridViewContentAlignment.MiddleRight
                    CH.HeaderCell.Style.Alignment = DataGridViewContentAlignment.BottomRight
                    CH.Width = 50
                    CH.HeaderText = HeaderText(j)
                    CH.Name = HeaderName(j) & i.ToString
                    CH.ReadOnly = True
                    CH.SortMode = DataGridViewColumnSortMode.NotSortable
                    .Columns.Add(CH)
                Next
            Next

            _DataGridViewIsInit = True
            .Rows.Add(5)
        End With

    End Sub

    ''' <summary>
    ''' Datagridview Spalten im Header verbinden
    ''' </summary>
    ''' <param name="DGV"></param>
    ''' <remarks></remarks>
    Private Sub DataGridViewPaintHeader(ByVal DGV As DataGridView)

        Dim Format As New StringFormat

        Format.Alignment = StringAlignment.Center
        Format.LineAlignment = StringAlignment.Center

        Dim Rect As Rectangle = Nothing
        Dim BrBackColor As New SolidBrush(DGV.ColumnHeadersDefaultCellStyle.BackColor)
        Dim BrForeColor As New SolidBrush(DGV.ColumnHeadersDefaultCellStyle.ForeColor)
        Dim F As Font = DGV.ColumnHeadersDefaultCellStyle.Font

        Using Fo As New Font(F.SystemFontName, F.Size, FontStyle.Bold)

            With DGV

                Dim G As Graphics = .CreateGraphics

                For i As Integer = 1 To 12

                    Dim Key As String = "Anz" & i.ToString
                    Dim Index As Integer = .Columns(Key).Index

                    Rect = .GetCellDisplayRectangle(Index, -1, True)

                    ' nur im sichtbaren Bereich
                    If Rect.Left > 0 Then
                        Rect.Width += .Columns(Index + 1).Width
                        Rect.Width -= 2
                        Rect.Height = Rect.Height \ 2 + 2
                        Rect.X += 1
                        Rect.Y += 1
                        G.FillRectangle(BrBackColor, Rect)

                        Dim d As Date = New Date(2000, i, 1)

                        G.DrawString(d.ToString("MMMM"), Fo, BrForeColor, Rect, Format)
                    End If

                Next

            End With

        End Using

    End Sub

End Class

' ------------------- Ende Datei Form1.vb  -------------------
' ------ Ende Projektdatei DGV_SpaltenVerbinden.vbproj  ------

	

Diskussion  

Diese Funktion ermöglicht es, Fragen, die die Veröffentlichung des Tipps betreffen, zu klären, oder Anregungen und Verbesserungsvorschläge einzubringen. Nach der Veröffentlichung des Tipps werden diese Beiträge nicht weiter verlinkt. Allgemeine Fragen zum Inhalt sollten daher hier nicht geklärt werden.
Folgende Diskussionen existieren bereits

Um eine Diskussion eröffnen zu können, müssen sie angemeldet sein.