Werte einem DataGridView hinzufügen

14/06/2009 - 16:18 von Maximilian Tescher | Report spam
Hallo zusammen,

ich habe ein Problem beim hinzufügen von Daten zu einem DataGridView.

Wie ich bei MS gelesen habe, kann ich Werte mittels
DataGridView.Rows.Add("Wert",Wert","Wert") hinzufügen, soweit ok.

Aber leider möchte ich Zeilen zu einem DataGridView hinzufügen, bei
dem die Reihenfolge der Spalten mir zum Zeitpunkt des Einfügen noch
nicht bekannt sind. Daher würde ich gerne mit DataGridView.Colums
("Spaltenname") die Werte einem Object hinzufügen und dann dieses
dem DataGridView hinzufügen.

Aber das klappt nicht bzw ich finde nicht den richtigen Ansatz.

Könnt Ihr mir hierzu ein Beispiel aufzeigen wie ich das lösen kann?
Pro Zeile sind es etwa 10 Werte die ich hinzufügen muss.

Vielen Dank und viele Grüsse,
Maximilian
 

Lesen sie die antworten

#1 Peter Götz
14/06/2009 - 18:49 | Warnen spam
Hallo Maximilian,

ich habe ein Problem beim hinzufügen von Daten
zu einem DataGridView.



Erst mal ist das DataGridView eigentlich nur ein
Medium um irgendwelche tabellarisch geordneten
Daten anzuzeigen.

Wie ich bei MS gelesen habe, kann ich Werte mittels
DataGridView.Rows.Add("Wert",Wert","Wert")
hinzufügen, soweit ok.



Im Prinzip ist sowas möglich, aber nicht unbedingt
die beste und flexibelste Lösung.

Aber leider möchte ich Zeilen zu einem DataGridView
hinzufügen, bei dem die Reihenfolge der Spalten mir
zum Zeitpunkt des Einfügen noch nicht bekannt sind.
Daher würde ich gerne mit DataGridView.Colums
("Spaltenname") die Werte einem Object hinzufügen
und dann dieses dem DataGridView hinzufügen.

Aber das klappt nicht bzw ich finde nicht den richtigen
Ansatz.



Erst mal sollte geklàrt werden, woher diese Daten
eigentlich kommen und wie sie konkret organisiert sind.

Könnt Ihr mir hierzu ein Beispiel aufzeigen wie ich das
lösen kann?
Pro Zeile sind es etwa 10 Werte die ich hinzufügen muss.



Was bedeutet "etwa 10 Werte pro Zeile".
Zur Anzeige von Daten muss im DataGridView eine konkrete
Anzahl von Spalten definiert sein.

Hier mal ein einfaches Beispiel, bei dem Daten in einer
DataTable gespeichert werden. Diese DataTable wird
dann vermittels einer zugehörigen DataView an ein
DataGridView gebunden.

Kopiere den Code in ein leeres Formmodul (Form1.vb)

' /// Code in Form1.vb
Public Class Form1
Private WithEvents DGV As DataGridView
Private mDT As DataTable
Private WithEvents mDV As DataView

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

DGV = New DataGridView
With DGV
.DefaultCellStyle.Font = _
New Font("Arial", 12)

.ColumnHeadersDefaultCellStyle.Font = _
New Font("Arial", 8, FontStyle.Bold)

.Dock = DockStyle.Fill
End With
Me.Controls.Add(DGV)

CreateData()

DGV.DataSource = mDV
DGV.AutoResizeColumns()

End Sub

Private Sub CreateData()
Dim i As Integer
Dim DR As DataRow

mDT = New DataTable
With mDT
.Columns.Add("ID", GetType(Integer))
.Columns.Add("SText", GetType(String))
.Columns.Add("LText", GetType(String))

For i = 1 To 12
DR = .NewRow
DR.Item(0) = i
DR.Item(1) = MonthName(i, True)
DR.Item(2) = MonthName(i, False)
.Rows.Add(DR)
Next
.AcceptChanges()
End With

mDV = New DataView(mDT)

End Sub

End Class
' \\\ E N T E

Nach dem Programmstart wird in Sub CreateData()
eine DataTable (mDT) erstellt und mit Daten gefüllt.
Zur DataTable wird eine DataView (mDV) erstellt,
mit deren Hilfe die DataTable an das DataGridView
gebunden wird.

Nachdem die Daten im DGV sichtbar sind, kannst
Du durch Mausklicks auf die Spaltenköpfe nach der
jeweiligen Spalte sortieren.
Sortieren ist per Code via DataView.Sort ebenfalls
möglich.
Darüberhinaus bieten DataTable und DataView div.
Funktionen und Methoden um bestimmte Datensàtze
zu suchen.

Datenquelle für ein DGV kann aber neben weiteren
möglichen Datenquellen auch eine List(Of Objekt) sein,
wie das nachfolgende Beispiel zeigt.

' /// Code in einem leeren Formmodul (Form1.vb)
Public Class Form1
Private WithEvents DGV As DataGridView
Private mMonList As List(Of MonClass)

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

DGV = New DataGridView
With DGV
.DefaultCellStyle.Font = _
New Font("Arial", 12)

.ColumnHeadersDefaultCellStyle.Font = _
New Font("Arial", 8, FontStyle.Bold)

.Dock = DockStyle.Fill
End With
Me.Controls.Add(DGV)

CreateData()

DGV.DataSource = mMonList
DGV.AutoResizeColumns()

End Sub

Private Sub CreateData()
Dim i As Integer
mMonList = New List(Of MonClass)

For i = 1 To 12
mMonList.Add(New MonClass(i))
Next

End Sub

Public Class MonClass
Private mID As Integer
Private mSText As String
Private mLText As String

Public Sub New(ByVal ID As Integer)
Select Case ID
Case 1 To 12
mID = ID
mSText = MonthName(ID, True)
mLText = MonthName(ID, False)

Case Else
Throw New ArgumentOutOfRangeException
End Select
End Sub

Public ReadOnly Property ID() As Integer
Get
Return mID
End Get
End Property

Public ReadOnly Property SText() As String
Get
Return mSText
End Get
End Property

Public ReadOnly Property LText() As String
Get
Return mLText
End Get
End Property
End Class

End Class
' \\\ E N T E

Hier ist das Sortieren der Daten nicht ganz so einfach.
Um solche Daten zu sortieren musst Du selbst Hand
anlegen (s.hierzu OH List(Of ...).Sort.


Ansonsten schau Dir auch mal

www.gssg.de -> Visual Basic -> VB.net

an. Dort gibt es eine ganze Reihe weiterer Beispiele
mit den DataGridView.

Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

Ähnliche fragen