Frage zu filtern in einer Combobox

  • VB.NET

Es gibt 29 Antworten in diesem Thema. Der letzte Beitrag () ist von mhc2004.

    Frage zu filtern in einer Combobox

    Hallo,

    ich habe eine Cobobox cboDatum_filtern, dort bekomme ich mit meiner Abfrage,

    VB.NET-Quellcode

    1. cboDatum_filtern.Datasource = ds
    2. cboDatum_filtern.DisplayMember = "Set1.Ausgangsdatum"


    alle Datumangaben hinein.Nun kann es aber vorkommen das ein Datum in der Spalte der Tabelle doppelt oder mehrfach vorkommt.Somit steht auch in der Combobox das gleiche Datum mehrfach drin.Ich möchte allerdings das immer nur ein Datum des jeweiligen Datums in der Cobobox steht und wenn ich auf das Datum klicke sollen mir die Datumangaben des jeweiligen Datums in meinem Datagrid nach diesem Datum gefiltert angezeigt werden.

    Kann mir jemand dabei helfen?





    Grüße

    Maik
    ...leider funktioniert es so nicht.

    Wenn ich mit

    SQL-Abfrage

    1. SELECT DISTINCT ...Group by


    arbeite kann ich ja die gleichen werte auch nicht mehr über eine Eingabemaske eingeben. Das ist doch das gleiche wenn ich in meiner Accessdatenbank in der Tabelle "Eindeutig" anklicke,oder irre ich da?
    Ich denke mit der Datenbank abfrage ist es auch ein wenig übertrieben. Was mir eingefallen ist, man kann doch auch in einer Combobox überprüfen ob ein Wert doppelt vorhanden ist, unabhängig davon woher die Daten kommen die in die Combobox geladen werden. Das müsste doch auch irgendwie gehen oder nicht?



    Grüße

    Maik
    naja über den select distinct bekommst du ja nur eine ausgabe
    und wieso willst du die gleichen werte wieder in der suchmaske angeben ?

    wenn du eine suchmaske hast baust du dir doch nur den select string zusammen mit den eingaben in
    deinen boxen da ist es doch egal ob du den wert anklickst oder den anderen in dem genau das gleiche steht.... oder versteh ich nur nicht was du willst ?
    Grüße Manu

    Was Gott dem Menschen erspart hat, kann der Computer.
    Billy ©, (*1932), Schweizer Aphoristiker
    Quelle: www.Aphorismen.de
    Ich denke ich habe es wohl ein bischen kompliziert beschrieben. Ich habe durch ein DataGrid welches ich durch eine mdb befülle eine Spalte "Ausgangsdatum"von vielen anderen Spalten die noch in der Tabelle sind.In dieser Spalte kann es vorkommen das auch mal ein Datum öfter vorkommt als nur einmal.

    Jetzt möchte ich eine Combobox haben in der diese Daten aus Spalte "Ausgangsdatum" eingelesen werden.Das ist kein Problem, das mach ich mit

    VB.NET-Quellcode

    1. cboDatum.DataSource = ds
    2. cboDatum.DisplayMember = "Set1.Ausgangsdatum"


    Allerdings ist es ja jetzt so, das ich nun in meiner Combobox alles stehen hab was in der Spalte "Ausgangsdatum" steht, auch gleiche Werte, also z.B. 5x das Datum 1.10.2009. Ich möchte in der Combobox immer nur einen Wert von jedem drin haben, weil ich es als Schnellauswahl haben möchte.Das heisst, klicke ich auf ein Datum,so sollen mir in der Tabelle(DataGrid) nur die Daten angezeigt werden die dieses Datum in der Spalte "Ausgangsdatum" haben. Ich hoffe ich konnte es so besser erklären. :S
    ja klar so habe ich es auch verstanden
    und du gibst ja dem dataset (also ds) ein ergebnis das aus einer sql-abfrage resultiert
    was ja denke ich mal eine select ist und in dieser select brauchst das schlüsselwort distinct so wie ich es die beschrieben habe

    du sollst distinct ja auch nur nutzen wenn du die combobox befüllst und nicht in der abrage für dein gridview
    Grüße Manu

    Was Gott dem Menschen erspart hat, kann der Computer.
    Billy ©, (*1932), Schweizer Aphoristiker
    Quelle: www.Aphorismen.de
    Ufff.... :D

    Jetzt wird es glaub ich ein bischen viel.Vieleicht kannst du mir an meinem Codeschnippsel mal zeigen wie es funktioniert?

    VB.NET-Quellcode

    1. Private dbpath As String = System.IO.Path.Combine(Application.StartupPath, "UserDB.mdb")
    2. Private conn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & dbpath & ";")
    3. Private sql As String = "SELECT * FROM Set1"
    4. Private cmd As New OleDbCommand(sql, conn)
    5. Private da As New OleDbDataAdapter(cmd)
    6. Private ds As New DataSet
    7. '------- Verbindung herstellen, DataSet füllen und in Datagrid anzeigen -------Private Sub LOAD_Table()
    8. Dim iCount As Integer
    9. Try
    10. 'Verbindung zur Datenbank öffnen
    11. conn.Open()
    12. 'Inhalte des Dataset zunächst löschen
    13. ds.Clear()
    14. 'Dataset mit der Tabelle Users füllen
    15. da.Fill(ds, "Set1")
    16. 'Datagrid anbinden
    17. DataGrid1.SetDataBinding(ds, "Set1")
    18. 'Combobox anbinden
    19. cboUsername.DataSource = ds
    20. cboUsername.DisplayMember = "Set1.Dosennummer"
    21. cboDatum.DataSource = ds
    22. cboDatum.DisplayMember = "Set1.Ausgangsdatum"
    23. 'Einfügen ohne doppelte Einträge
    24. Dim dt As DataTable = ds.Tables("Set1")
    25. 'alle Zeilen des DataTable durchlaufen
    26. 'Wieviele Datensätze
    27. Dim sql As String = "SELECT COUNT (*) FROM Set1"
    28. Dim cmd As OleDbCommand = New OleDbCommand(sql, conn)
    29. iCount = cmd.ExecuteScalar()
    30. txtStecker.Text = ""
    31. 'txtNutzung_User.Text = ""
    32. cboUsername.Text = ""
    33. txtBuchse.Text = ""
    34. Catch ex As OleDbException
    35. MessageBox.Show(ex.Message, "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
    36. Finally
    37. 'Verbindung zur Datenbank auf jeden Fall wieder schließen
    38. conn.Close()
    39. End Try
    40. End Sub
    du übergibst auch die ganze tabelle ohne eine sql abfrage an die combobox mach dafür eine
    mit

    SQL-Abfrage

    1. SELECT DISTINCT ...

    das kannst du dann dem dataadatpter übergeben

    VB.NET-Quellcode

    1. da = new OleDbDataAdapter("deinSQL-String", "deineTabelle")

    und dann müsstest du normal weitermachen können
    Grüße Manu

    Was Gott dem Menschen erspart hat, kann der Computer.
    Billy ©, (*1932), Schweizer Aphoristiker
    Quelle: www.Aphorismen.de
    nun wie schon gesagt für das befüllen deines datagrids nutzt du dann einen anderen SQL-String ohne das Distinct
    Grüße Manu

    Was Gott dem Menschen erspart hat, kann der Computer.
    Billy ©, (*1932), Schweizer Aphoristiker
    Quelle: www.Aphorismen.de
    Ich habe jetzt eine zweite Abfrage gemacht, parallel zur eigentlichen, nur iwie finde ich trotzdem gleiche einträge in der Combobox, nur immer mit einer Leerzeile nun drin. ?(

    VB.NET-Quellcode

    1. Private sql_date As String = "SELECT DISTINCT Ausgangsdatum FROM Set1"
    2. Private sql As String = "SELECT * FROM Set1"Private cmd_date As New OleDbCommand(sql_date, conn)
    3. Private cmd As New OleDbCommand(sql, conn)Private da_date As New OleDbDataAdapter(cmd_date)
    4. Private da As New OleDbDataAdapter(cmd)Private ds_date As New DataSet
    5. Private ds As New DataSetPrivate Sub LOAD_Table()
    6. Try
    7. 'Verbindung zur Datenbank öffnen
    8. conn.Open()
    9. 'Inhalte des Dataset zunächst löschen
    10. ds.Clear()
    11. 'Dataset mit der Tabelle Users füllen
    12. da.Fill(ds, "Set1")
    13. 'Datagrid anbinden
    14. DataGrid1.SetDataBinding(ds, "Set1")
    15. 'Combobox anbinden
    16. cboUsername.DataSource = ds
    17. cboUsername.DisplayMember = "Set1.Dosennummer"
    18. da_date.Fill(ds_date, "Set1")
    19. cboDatum_filtern.DataSource = ds_date
    20. cboDatum_filtern.DisplayMember = "Set1.Ausgangsdatum"
    21. txtStecker.Text = ""
    22. cboUsername.Text = ""
    23. txtBuchse.Text = ""
    24. Catch ex As OleDbException
    25. MessageBox.Show(ex.Message, "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
    26. Finally
    27. 'Verbindung zur Datenbank auf jeden Fall wieder schließen
    28. conn.Close()End Try
    29. End Sub


    Was mach ich denn falsch?
    du willst also nach dem ausgewählten eintrag in deiner combobox in der tabelle suchen lassen und dann im datagrid ausgeben lassen ??
    Grüße Manu

    Was Gott dem Menschen erspart hat, kann der Computer.
    Billy ©, (*1932), Schweizer Aphoristiker
    Quelle: www.Aphorismen.de
    das schaffst du auch mit dem was ich dir gezeigt habt
    den sql-string erstellen darin den combobox.text bzw combobox.selected item als wert angeben
    und das an die datasource für das datagrid übergeben
    Grüße Manu

    Was Gott dem Menschen erspart hat, kann der Computer.
    Billy ©, (*1932), Schweizer Aphoristiker
    Quelle: www.Aphorismen.de
    natürlich und diese abfrage ist in vb doch nur ein string dem du mit & werte aus einem element übergeben kannst
    zb.

    VB.NET-Quellcode

    1. "SELECT * FROM tabelle WHERE Wert='" & combobox1.selecteditem.tostring & "'"
    Grüße Manu

    Was Gott dem Menschen erspart hat, kann der Computer.
    Billy ©, (*1932), Schweizer Aphoristiker
    Quelle: www.Aphorismen.de