Combobox aus DT füllen

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von lris08.

    Combobox aus DT füllen

    Hi,
    benötige eure Hilfe beim füllen einer Combobox... jedoch mit eine gruppierungsfunktion...

    So schaut das DataTable aus (so ca.)

    Quellcode

    1. 0 1 Handel Blume
    2. 1 321 Handel Messer
    3. 2 48 Handel Lampe
    4. 3 32 Dienstl. Service


    Mein derzeitiger Code:

    VB.NET-Quellcode

    1. Private Sub Laden__Provisionen()
    2. Dim ConStr As String = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source =" & Archiv & "; Jet OLEDB:database Password=" & DBPass & ";"
    3. Dim Con As New OleDbConnection(ConStr)
    4. da_Provision = New OleDbDataAdapter("SELECT * FROM Provisionsbasis, Provisionstabelle " & _
    5. "WHERE Provisionsbasis.PrB_Status = 'A' AND " & _
    6. "Provisionstabelle.PrT_Basis = Provisionsbasis.ID;", Con)
    7. ds_Provision.Tables.Add(dt_Provision)
    8. da_Provision.Fill(dt_Provision)
    9. ausgabe__Provisionen()
    10. End Sub


    Ausgabe in Combo:

    VB.NET-Quellcode

    1. Private Sub ausgabe__Combo_Provisionen()
    2. ' erst gruppieren
    3. ' dann in Combop ausgeben... Aber nur Cell 1 von Provisionsbasis
    4. End Sub


    und später mal... so soll in DGV abhängig von der Combo ausgegeben werden :

    VB.NET-Quellcode

    1. Private Sub cb_PrvFirmen_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cb_PrvFirmen.SelectedIndexChanged
    2. Dim PvFirmaID As Integer
    3. With DirectCast(sender, ComboBox)
    4. If .SelectedValue Is Nothing Then Return
    5. ' Daten der ausgewählten Person in Label1 anzeigen
    6. With CType(.SelectedValue, Firmen)
    7. PvFirmaID = .ID
    8. End With
    9. End With
    10. ausgabe__DGV_Provisionen(PvFirmaID)
    11. End Sub
    12. Private Sub ausgabe__DGV_Provisionen(ByVal PvFirmaID As Integer)
    13. Dim cb_Provision As New OleDbCommandBuilder(da_Provision)
    14. bs_Provision.DataSource = dt_Provision
    15. bs_Provision.Filter = "PrT_Status = 'A' and Provisionsbasis.ID = " & PvFirmaID & ""
    16. Me.DGV_Provisionen.DataSource = bs_Provision
    17. ' Anpassen !
    18. End Sub


    Ausgabe in DGV - später mal abhängig was in Combo gewählt wird... über Filter


    Wenn ich meine Combobox "normal" daraus füllen lasse, habe ich in der Combo 3 x Handel und 1 x Dienstl. stehen.

    Nun möchte ich dies gruppieren, dass nur 1 x Handel und 1 x Dienstl. drinnen steht...


    Habe Ihr da vielleicht ne Idee wie ich das machen könnte ?

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „lris08“ ()

    lris08 schrieb:

    Wenn ich meine Combobox "normal" daraus füllen lasse, habe ich in der Combo 3 x Handel und 1 x Dienstl. stehen.

    Das hängt mit dem gejointen Sql zusammen:
    "SELECT * FROM Provisionsbasis, Provisionstabelle " & _
    "WHERE Provisionsbasis.PrB_Status = 'A' AND " & _
    "Provisionstabelle.PrT_Basis = Provisionsbasis.ID;"

    Da werden 2 Tabellen zusammengerührt, und nun willst du sie wieder auseinanderfrickeln. Anstatt dass du die eine Tabelle in die eine DataTable deines typisierten Datasets lädtst, und die annere in die annere.

    Auch addest du immernoch wie wild untypisierte Datatables zur Laufzeit - so kann man natürlich nix gescheit designen.

    Merk dirdoch einfach mal:
    • mit Sql immer nur von einer Tabelle selektieren! keine InnerJoins! (dein Sql entspricht einem solchen)
    • Keine DataTables zur Laufzeit erzeugen - die sind ja immer untypisiert, und die typisierten DataTables stehen doch bereit!

    Was du glaub basteln willst, ist ein ParentChild-View, und die einfachste Lösung dafür ist in "Datenbank in 10 Minuten" auf Movie-Tuts gezeigt. Und auch in "ParentChildView" auf derselben Site.

    Nur das eben statt der Combo gleich ein DGV eingesetzt ist, um die übergeordneten Datensätze anzuwählen, aber diese Gui-Eigenheit ist problemlos austauschbar, denn Daten und Gui sind getrennt.

    Wenn du einen JoiningView brauchst, kannst du ihn im View designen, aus denselben Daten, mit denen auch ein ParentChildView erstellt wern kann.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    ok... soweit verstanden... hoffe ich ...

    nun habe ich das mal getrennt und werde die Provisionsbasis einzeln also getrennt laden:

    VB.NET-Quellcode

    1. Private Sub Laden__Provisionsbasis()
    2. Dim ConStr As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Archiv & "; Jet OLEDB:database Password=" & DBPass & ";"
    3. Dim da As New OleDbDataAdapter("SELECT * FROM Provisionsbasis WHERE PrB_Status = 'A'", ConStr)
    4. Dim ds As New DataSet
    5. Try
    6. da.Fill(ds, "Provisionsbasis")
    7. cb_PrvFirmen.DataSource = ds
    8. cb_PrvFirmen.DisplayMember = "Provisionsbasis.PrB_Firma"
    9. cb_PrvFirmen.ValueMember = "PrB_Firma"
    10. Catch ex As Exception
    11. MessageBox.Show("Fehler beim füllen der Provisionsfirmen..." & vbCrLf & ex.Message, "DIMS Info...", MessageBoxButtons.OK, MessageBoxIcon.Error)
    12. End Try
    13. End Sub


    Läuft erstmal durch ohne Fehlemeldung, jedoch steht in der Combobox folgendes drinnen:
    System.Data.DataViewManagerListItemTypeDescriptor


    Das komische daran ist, dass ich genau den gleichen Code in einer anderen Form habe nur mir einer anderen Datenbanktabelle... und dorf funktionierts...
    Hier mal der Code von der anderen Form:

    Quellcode

    1. Private Sub Aktenschrank_laden()
    2. Dim ConStr As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Archiv_aktiv & "; Jet OLEDB:database Password=" & DBPass & ";"
    3. Dim da As New OleDbDataAdapter("SELECT * FROM Archiv WHERE Arc_Tag = 'HauptTreeNode'", ConStr)
    4. Dim ds As New DataSet
    5. Try
    6. da.Fill(ds, "Archiv")
    7. Me.Combobox1.DataSource = ds
    8. Me.Combobox1.DisplayMember = "Archiv.Arc_Bezeichnung"
    9. Me.Combobox1.ValueMember = "Arc_Bezeichnung"
    10. Combobox1.SelectedIndex = 0
    11. Catch ex As Exception
    12. Fehlermeldung = ex.Message & " - Fehler: Dokumentenmappen, Aktenschrank_laden"
    13. Fehler_Instance.Ausgabe(Fehlermeldung)
    14. End Try
    15. End Sub


    Könnt Ihr mir sagen, warum der eine geht der andere nicht und so ne komische Meldung in der Combo ausgibt ??????

    könnt mich übergeben... :whistling:
    ich glaub ich sitze zu lange an diesem Programm schn dran...

    VB.NET-Quellcode

    1. Private Sub Laden__Provisionsbasis()
    2. Dim ConStr As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Archiv & "; Jet OLEDB:database Password=" & DBPass & ";"
    3. Dim da_FA As New OleDbDataAdapter("SELECT * FROM Provisionsbasis WHERE PrB_Status = 'A'", ConStr)
    4. Dim ds_FA As New DataSet
    5. cb_PrvFirmen.DisplayMember = ""
    6. cb_PrvFirmen.ValueMember = ""
    7. Try
    8. da_FA.Fill(ds_FA, "Provisionsbasis")
    9. Me.cb_PrvFirmen.DataSource = ds_FA
    10. Me.cb_PrvFirmen.DisplayMember = "Provisionsbasis.PrB_Firma"
    11. Me.cb_PrvFirmen.ValueMember = "PrB_Firma"
    12. cb_Preisdatum.SelectedIndex = 0
    13. Catch ex As Exception
    14. MessageBox.Show("Fehler beim laden der Preisbasis (Datum)..." & vbCrLf & ex.Message, "DIMS Info...", MessageBoxButtons.OK, MessageBoxIcon.Error)
    15. End Try
    16. End Sub



    ist vielleicht pervers und aufgeblähr, aber so gehts :)


    mann mann... glaub hab noch viel zu lernen...