vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Controls · DataGrid & DataGridView   |   VB-Versionen: VB2010 - VB201530.05.19
Funktion zum Formatieren einer DatagridView-Spalte mit dezimal Alignment

Die im CellPainting-Ereignis eines DatagridView anzuwendende Funktion erzeugt das dezimale Alignment der numerischen Werte.

Autor:   Dietrich HerrmannBewertung:  Views:  746 
ohne HomepageSystem:  Vista, Win7, Win8, Win10kein Beispielprojekt 

Für die Lesbarkeit von numerischen Werten bei der Anzeige im DatagridView ist im speziellen Fall von numerischen Werten (unterschiedliche Stellenanzahl vor und nach dem Komma) die dezimale Ausrichtung der Werte in der Spalte von Vorteil. Dezimale Ausrichtung bedeutet dabei die Ausrichtung aller Werte der Spalte am Komma. Dies kann man insbesondere anwenden auf Spalten einer SQL-Tabelle des Typs "float".

Folgende Restriktionen sind für die Anwendung der Funktion vonnöten:

  • im Datagridview muss gelten: AutoSizeColumnsMode = None

Der Aufruf der Funktion erklärt sich von selbst.

Hier die Funktion:

''' <summary>
'''   Formatieren einer DatagridView-Spalte mit dezimal Alignment
''' </summary>
''' <param name="e">das Cellpainting-Ereignis</param>
''' <param name="theDGV">das DatagridView</param>
''' <param name="theColumnIndex">der Index der Spalte für dezimal Alignment</param>
''' <param name="theBGColor">die Hintergrundfarbe der Zelle</param>
''' <param name="theForeColor">die Vordergrundfarbe der Zelle</param>
Public Sub createDecimalAlignColumn(e As DataGridViewCellPaintingEventArgs,
  theDGV As DataGridView,
  theColumnIndex As Short,
  theBGColor As Color,
  theForeColor As Color)
 
  Dim strE, strL, strR As String
  Dim SizeL, SizeR As SizeF
  Dim recL, recR As RectangleF
  Dim sym, iComm As Short
  Dim dFont As Font = theDGV.DefaultCellStyle.Font
 
  Dim sfL As New StringFormat With {.Alignment = StringAlignment.Near,
    .LineAlignment = StringAlignment.Center}
 
  Dim sfR As New StringFormat With {.Alignment = StringAlignment.Far,
    .LineAlignment = StringAlignment.Center}
 
  Dim p As New Pen(theDGV.GridColor)
  Dim brbc As New SolidBrush(theBGColor)
  Dim brfc As New SolidBrush(theForeColor)
 
  If e.ColumnIndex = theColumnIndex And e.RowIndex >= 0 And Not IsDBNull(e.Value) Then
    e.PaintBackground(e.CellBounds, True)
 
    ' das Rechteck der Zelle
    Dim recCell As New Rectangle(e.CellBounds.X - 1, e.CellBounds.Y - 1,
      e.CellBounds.Width, e.CellBounds.Height)
 
    sym = recCell.Width / 2 ' die Mitte der Zelle
 
    ' das Rechteck für den ganzzahligen Teil des Werts
    recL = New RectangleF(recCell.X, recCell.Y, sym, recCell.Height)
 
    ' das Rechteck für den Dezimalstellen-Tei des Werts
    recR = New RectangleF(recCell.X + sym - 2, recCell.Y, recCell.Width - sym, recCell.Height)
 
    ' der Wert als String
    strE = e.Value.ToString
    iComm = strE.IndexOf(",")
    If iComm >= 0 Then
      strL = strE.Substring(0, iComm)  ' String vor dem Komma
      strR = strE.Substring(iComm)     ' String nach dem Komma inklusive
    Else
      strL = strE
      strR = ",0"
    End If
 
    With e.Graphics
      ' linker String, Länge gemäß Font
      SizeL = .MeasureString(strL, dFont)
 
      ' rechter String, Länge gemäß Font
      If strR <> "" Then SizeR = .MeasureString(strR, dFont)
      .TextRenderingHint = Drawing.Text.TextRenderingHint.ClearTypeGridFit
 
      ' Background der Zelle
      .FillRectangle(brbc, recCell)
 
      ' Border der Zelle
      .DrawRectangle(p, recCell)
 
      ' String vor dem Komma
      .DrawString(strL, dFont, brfc, recL, sfR)
 
      ' String nach dem Komma
      If strR <> "" Then .DrawString(strR, dFont, brfc, recR, sfL)
    End With
    e.Handled = True
  End If
End Sub



Anzeige

Kauftipp Unser Dauerbrenner!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.
 
 
Copyright ©2000-2019 vb@rchiv Dieter OtterAlle 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.