ComboBox mit Werten füllen...

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von Manschula.

    ComboBox mit Werten füllen...

    Hallo,

    ich habe ein Problem mit dem Füllen einer ComboBox.
    Dazu habe ich mir folgendes gebaut:

    VB.NET-Quellcode

    1. Public Shared Sub FillList(ByRef List As ComboBox, ByVal SqlQuery As String, _
    2. Optional ByVal ColumnIndex As Int32 = 0)
    3. Dim dt As DataTable = Me.SelectData(SqlQuery)
    4. List.Items.Clear()
    5. For Each row As DataRow In dt.Rows
    6. List.Items.Add(row.Item(ColumnIndex).ToString())
    7. Next row
    8. End Sub

    Problem ist, dass es bei vielen Datensätzen sehr langsam ist.
    Bis zu mehreren Sekunden!
    Gibt es vielleicht alternativen Methoden, wie man die Einträge auf einen Schlag rein bekommt?

    Beste Grüße!
    Hallo, hast du mal versucht deine datasource direkt an die Combobox zu übergeben?

    vielleicht geht es dann schneller?!!

    VB.NET-Quellcode

    1. ComboBox1.DataSource = Me.SelectData("Select Username from login")
    2. ComboBox1.DisplayMember = "Username"
    3. '
    "Wenn jemand in einem Betrieb unverzichtbar ist, dann ist dieser Betrieb falsch organisiert." - Roberto Niederer
    Hallo,

    Milaim, ich bekomme dann als Einträge eine Ansammlung von System.Data.DataRowView
    weil SelectData ein DataTable-Object zurück gibt.

    Foxm2k, das mit dem Layout hat nicht geholfen.
    Die einzelnen Add´s sind sehr langsam 8|

    Irgendwie muss ich das hinbekommen, weil es ca. 5 Sekunden dauert bis das Fenster (nach dem Start) angezeigt wird.
    Das ist definitiv zu lange.

    Beste Grüße!

    PS: Miliam, wie das dann aussieht, kannst Du Dir in dem angehängten Bild anschauen
    Bilder
    • liste.JPG

      21,65 kB, 342×300, 610 mal angesehen
    Hatte es mir schon fast gedacht, es war nur zu spät und ich war zu Faul es wieder in die hand zu nehmen.. hehe

    also, so müssts hinhauen, wenn eine Datatable als rückgabewert ist:

    VB.NET-Quellcode

    1. Dim dt As New DataTable
    2. dt = Me.SelectData("select Username from login") 'dataTable füllen
    3. ComboBox1.DataSource = dt 'DataTable as datasource
    4. ComboBox1.DisplayMember = "Username" 'Spaltenname, die aus der DB geladen wird und angezeigt wird.
    5. '


    Ich hatte nähmlich eine BindingSource als rückgabewert als ich es getestet hatte.. Wollts eben noch hinschreiben aber wie gesagt... war zu faul..

    hehe

    also, das müssts aber sein. habs selbst mit datatable getestet ;)

    Hoffe es geht nur schneller
    "Wenn jemand in einem Betrieb unverzichtbar ist, dann ist dieser Betrieb falsch organisiert." - Roberto Niederer
    Hallöchen,

    vielen Dank für Deine Antwort!
    Ich hatte das so gemacht:

    VB.NET-Quellcode

    1. Dim dt As DataTable = Me.SelectData(SqlQuery)
    2. Dim drc As DataRowCollection = dt.Rows
    3. Dim count As Int32 = drc.Count - 1
    4. Dim items(count - 1) As Object
    5. List.Items.Clear()
    6. For i As Int32 = 0 To count - 1
    7. items(i) = drc(i).Item(ColumnIndex)
    8. Next
    9. List.Items.AddRange(items)


    Das war dann wesentlich besser als die erste Variante,
    aber es scheint als wäre die letzte Lösung von Dir noch besser!
    :thumbsup:
    Die nehme ich dann auch!

    Vielen Dank und beste Grüße!

    Edit:
    Foxm2k, ja richtig, das viel mir auch auf!
    Danke auch Dir!
    Hallo, der Vorteil von combobox1.datasource ist, dass du überhaupt keine Schleifen brauchst.

    kannst einfach die datatable übergeben. Mit einer Zeile ists gelaufen. Wird auf jedenfall schneller gehn.
    "Wenn jemand in einem Betrieb unverzichtbar ist, dann ist dieser Betrieb falsch organisiert." - Roberto Niederer
    Wie bekomme ich es denn hin, die ComboBox mit den Datenbanken eines Servers zu füllen?

    Ich meine den SQL-Befehl: SHOW DATABASES


    Mein Ziel ist es, dass ich erstmal die Datenbank über ein Formular auswählen kann, bevor ich Sie dann verwende.