PDA

Vollständige Version anzeigen : DataGridView in ListBox übergeben?


Gaertner
19.05.2008, 07:30
Hallo Zusammen,
habe folgendes Problem:
Ich fülle ein DataGridView mit bestimmten Daten aus einer SQL.
Nun möchte ich gerne das ich Spalte x als Auswahl in einer ListBox angezeigt bekomme.
Irgendwie finde ich aber nicht den rechten Weg.
Dachte:
-DataGridView füllen
-feststellen wieviele Einträge vorhanden sind
-in einer schleife die felder aus dem Grid auslesen und in die ListBox einfügen

aber irgendwie kriege ich das nicht so recht hin.

Was mach ich falsch? Oder bin ich auf dem richtigen Wege?
Hat jemand ein Beispiel für mich :rolleyes:

Robert_Zenz
19.05.2008, 09:22
Morgen.

Also ich würde das so lösen:

Private Sub GridToList()
For each Row as DataGridViewRow in Me.DeinDataGridView.Rows
Me.DeineListBox.Items.Add(Me.DeinDataGridView.Item("meineSpalte", row.Index).toString)
Next
End Sub

Ohne das jetzt getestet zu haben, glaube ich das es funktioniert. Du musst nur eines beachten, wenn die Zelle leer ist, liefert das Grid (glaube ich, entweder DataGridView oder DataTable, aber ich glaub es war das Grid) eine Exception retour, also einfach, wenn dem so ist, in eine Try Catch einklammern.



Private Sub GridToList()
For each Row as DataGridViewRow in Me.DeinDataGridView.Rows
Try
Me.DeineListBox.Items.Add(Me.DeinDataGridView.Item("meineSpalte", row.Index).toString)
Catch ex as Exception
End Try
Next
End Sub


Rob

Gaertner
19.05.2008, 16:08
So weit so gut,
habe ich auch verstanden aber als Ergebnis bekomme ich Leider nur folgendes angezeigt:

DataGridViewTextBoxCell{ColumnIndex=2,RowIndex=0}
DataGridViewTextBoxCell{ColumnIndex=2,RowIndex=1}
DataGridViewTextBoxCell{ColumnIndex=2,RowIndex=2}
DataGridViewTextBoxCell{ColumnIndex=2,RowIndex=3}
DataGridViewTextBoxCell{ColumnIndex=2,RowIndex=4}
DataGridViewTextBoxCell{ColumnIndex=2,RowIndex=5}
usw....

Also der tatsächliche Text, der angezeigt werden soll überschreibt den Eintrag nicht!?!

JeanCantos
19.05.2008, 16:30
Hi,

die Spalte
Me.DeineListBox.Items.Add(Me.DeinDataGridView.Item("meineSpalte", row.Index).toString)
müsste m.E. so lauten
Me.DeineListBox.Items.Add(row.Cells(*).Value.ToString())

Wobei Du bei * entweder den Index der Spalte als Integer eingeben musst oder den Namen der Spalte as String

Gruß,

Jean

Gaertner
19.05.2008, 17:19
Danke Jean, so funktionierts perfekt.

Aber für mein Verständnis:
In der Version von Rob wird die Zeile mit Index markiert und sollte eigentlich mit dem Inhalt überladen werden, sollte doch in Theorie auch funktionieren, oder?

Noodles
19.05.2008, 19:54
Du solltest DataBinding verwenden.

Stichworte: ListBox.DataSource, ListBox.DisplayMember, ListBox.ValueMember

Robert_Zenz
19.05.2008, 22:33
Danke Jean, so funktionierts perfekt.

Aber für mein Verständnis:
In der Version von Rob wird die Zeile mit Index markiert und sollte eigentlich mit dem Inhalt überladen werden, sollte doch in Theorie auch funktionieren, oder?

Tut es auch...man sollte nur halt das .Value nicht vergessen. ;)
(Ich kenn mich schon hint' und vorn nicht mehr zwischen DataTable und DataGridView aus...*sigh*)

Rob

P.s. Und DataTable hat keine Item-Eigenschaft (und keine Value-Eigenschaft) und liefert den Fehler bei einer leeren Zelle...dat war's...oder so...whatever...

Gaertner
20.05.2008, 07:04
Erst mal Dank an Alle.

@Noodles
Ich wollte die ListBox nicht binden da ich damit eine Suchfunktion für den User erleichter. Die List Box gibt mir noch andere Werte zurück, die ich für meine Suche in wiederum anderen Tabellen benötige. Funktioniert auch einwandfrei. Trotzdem Danke für die Anregung.