Natürlich ist es besser, wenn alle Daten in getrennten Spalten stehen. Es muss auch nicht alles in einem DataGridView stehen. Beim Anwählen einer Zeile, können Detail-Daten in weiteren DGV's oder Einzelsteuerelementen angezeigt werden. Es gibt viele Möglichkeiten für Detailansichten. Auch kann man den Zellen ein Kontextmenü zuweisen.
Falls die Werte im DGV nur angezeigt werden sollen, also nicht Bearbeitet werden sollen, so ist auch eine grafische Lösung möglich. Dabei musst du selbst die Breite und Höhe einer Zelle einstellen.
Hier ein Beispiel (ohne Zeilenumbruch):
Die Daten werden hier am Doppelpunkt getrennt in Links und Rechts.
Private Sub DataGridView_CellPainting(sender As Object, e As _
DataGridViewCellPaintingEventArgs) Handles BenutzerDataGridView.CellPainting
Dim dgv = DirectCast(sender, DataGridView)
Try
'todo: Hier den Namen der Spalte anpassen!
If dgv.Columns("DataGridViewTextBoxColumn1").Index = e.ColumnIndex _
AndAlso e.RowIndex >= 0 Then
'Hintergrund und Gitter zeichnen
e.PaintBackground(e.CellBounds, True)
'Text zeichnen
If (e.Value IsNot Nothing) Then
'todo: Hier eventuell Rendermodus anpassen!
e.Graphics.TextRenderingHint = _
Drawing.Text.TextRenderingHint.ClearTypeGridFit
Dim vs = CStr(e.Value).Split(":"c) 'Text teilen am Doppelpunkt
If vs.Length = 2 Then 'Text links und rechts zeichnen
Using sf As New StringFormat With {.LineAlignment = _
StringAlignment.Center}
Using sbr As New SolidBrush(e.CellStyle.ForeColor)
If (e.State And DataGridViewElementStates.Selected) > 0 Then
sbr.Color = e.CellStyle.SelectionForeColor
End If
sf.Alignment = StringAlignment.Near 'links
e.Graphics.DrawString(vs(0).Trim & ":", e.CellStyle.Font, sbr, _
e.CellBounds, sf)
sf.Alignment = StringAlignment.Far 'rechts
e.Graphics.DrawString(vs(1).Trim, e.CellStyle.Font, sbr, _
e.CellBounds, sf)
End Using
End Using
Else 'Normal zeichnen
e.PaintContent(e.CellBounds)
End If
End If
e.Handled = True
End If
Catch ex As Exception
End Try
End Sub Und so würde es dann etwa in der Zelle aussehen:
|Z76Z43-6: 1532,11 € / Stk.|
|P456: 1,56 € / Meter|
|Z76Z43-6: 1532,11 € / Stk.| |