mehrer DGV Spalten in Combobox zum filtern der Anzeige

  • VB.NET
  • .NET (FX) 4.0

Es gibt 23 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    mehrer DGV Spalten in Combobox zum filtern der Anzeige

    Hallo
    Mit einer Combobox filtere ich mir raus, das nur angezeigt wird was ich mir aus der Spalte Einbauort_1 aus gesucht habe .
    Das passiert mit folgendem Code:

    VB.NET-Quellcode

    1. Private Sub FillFilterCBX()
    2. Dim lstWZG = From Eintrag In Me.DtS_BoPa.DTT_BoPa
    3. Order By Eintrag.Einbauort_1 Ascending
    4. Select Eintrag.Einbauort_1 Distinct
    5. With Cbx_Filter_Werkzeug
    6. .Items.Clear()
    7. .BeginUpdate()
    8. .Items.Add(">Alle<")
    9. .Items.AddRange(lstWZG.ToArray)
    10. .EndUpdate()
    11. .SelectedIndex = 0
    12. End With
    13. lstWZG = Nothing
    14. End Sub

    Nun habe ich aber 8 Einbauorte in meinem DGV. Ist es möglich alle 8 Einbauorte in der Combobox darzustellen ?

    VB.NET-Quellcode

    1. Private Sub FillFilterCBX()
    2. With Cbx_Filter_Werkzeug
    3. .Items.Clear()
    4. .BeginUpdate()
    5. .Items.Add(">Alle<")
    6. Dim lstWZG = From Eintrag In Me.DtS_BoPa.DTT_BoPa
    7. Order By Eintrag.Einbauort_1 Ascending
    8. Select Eintrag.Einbauort_1 Distinct
    9. .Items.AddRange(lstWZG.ToArray)
    10. lstWZG = From Eintrag In Me.DtS_BoPa.DTT_BoPa
    11. Order By Eintrag.Einbauort_2 Ascending
    12. Select Eintrag.Einbauort_2 Distinct
    13. .Items.AddRange(lstWZG.ToArray)
    14. lstWZG = From Eintrag In Me.DtS_BoPa.DTT_BoPa
    15. Order By Eintrag.Einbauort_3 Ascending
    16. Select Eintrag.Einbauort_3 Distinct
    17. .Items.AddRange(lstWZG.ToArray)
    18. lstWZG = From Eintrag In Me.DtS_BoPa.DTT_BoPa
    19. Order By Eintrag.Einbauort_4 Ascending
    20. Select Eintrag.Einbauort_4 Distinct
    21. .Items.AddRange(lstWZG.ToArray)
    22. lstWZG = From Eintrag In Me.DtS_BoPa.DTT_BoPa
    23. Order By Eintrag.Einbauort_5 Ascending
    24. Select Eintrag.Einbauort_5 Distinct
    25. .Items.AddRange(lstWZG.ToArray)
    26. lstWZG = From Eintrag In Me.DtS_BoPa.DTT_BoPa
    27. Order By Eintrag.Einbauort_6 Ascending
    28. Select Eintrag.Einbauort_6 Distinct
    29. .Items.AddRange(lstWZG.ToArray)
    30. lstWZG = From Eintrag In Me.DtS_BoPa.DTT_BoPa
    31. Order By Eintrag.Einbauort_7 Ascending
    32. Select Eintrag.Einbauort_7 Distinct
    33. .Items.AddRange(lstWZG.ToArray)
    34. lstWZG = From Eintrag In Me.DtS_BoPa.DTT_BoPa
    35. Order By Eintrag.Einbauort_8 Ascending
    36. Select Eintrag.Einbauort_8 Distinct
    37. .Items.AddRange(lstWZG.ToArray)
    38. .EndUpdate()
    39. .SelectedIndex = 0
    40. End With
    41. lstWZG = Nothing
    42. End Sub
    Sieht vlt. bescheuert aus - das ist numal die logische Folge eines Datenmodell-Fehlers.
    Die 8 EinbauOrte sind vermutlich alle das gleiche, und sowas sollte man dann als eine Entität modellieren. Evtl. brauchts noch eine ZwischenTabelle, um zu modellieren, dass ein DTT_BoPa mehrere Einbauorte haben kann.

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

    Dassis komisch - eigentlich hätte dein eigener Code dann auch nicht kompilieren dürfen.
    Mach mal hinter jedem Distinct eine Leerzeile - ich hab den Eindruck, er denkt, der Linq-Ausdruck gehe noch weiter.

    Zum Datenmodell: Du musst iwie versuchen, Datenmodellierung zu verstehen. Wenn jemand sagt: "Einbauort", dann meint er immer Einbauort, also eben wo man was einbaut, er meint die Bedeutung von "Einbauort". Er meint nicht Alter, Gefährdungspotential, Lieferant oder Whatever, sondern er meint Einbauort. In diesem Sinne sind Einbauort_1 bis Einbauort_8 alle das gleiche - es sind Einbauorte.
    Wie gesagt, da muss man eine Tabelle Einbauort schaffen, und vermutlich noch eine Zwischentabelle, damit du jedem DTT_BoPa mehrere Einbauorte zuordnen kannst.
    Ah - du sprichst von Werkzeugen - jetzt reime ich mir zusammen, dass die Tabelle Einbauort bereits die Zwischentabelle ist, mithilfe derer jedes BoPa mehreren Werkzeugen zugeordnet werden kann.
    Oder aber es ist noch einfacher: Wenn in jedes Werkzeug nur ein BoPa eingebaut werden kann, dann braucht die Tabelle Werkzeug nur einen Verweis auf BoPa, eine "Relation".

    Du siehst: Ich kenne deine zu modellierenden Geschäftsvorfälle nicht, und daher sind meine Modellierungs-Versuche ein blindwütiges Stochern im Trüben.
    Nur bei 8 numerierten Spalten kann man mit 90% Sicherheit sagen, dass gegen Datenmodellierungs-Regeln verstossen wird.

    Hier ein Tut zu der Denkweise: Grundlagen: Relationale Datenmodellierung

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

    Das mit der Leerzeile war es.
    Ich musste jetzt aber die letzte Zeile "lstWZG = Nothing" auskommentieren weil der Compiler meldet wurde nicht deklariert.

    Vielen Dank für deine Hinweise zur Datenmodellierung.
    Das hae ich noch nie begriffen und werde es auch nicht begreifen. Ausserdem ist mein VB Zeit durch Krankheit begrenzt.
    Hallo
    Es hat doch nicht so richtig funktioniert
    Ich werte die Combobox mit folgenden Code aus:

    VB.NET-Quellcode

    1. Private Sub Bilde_Werkzeug_Filter()
    2. If Cbx_Filter_Werkzeug.SelectedIndex = -1 Then Return
    3. Dim Such_Ort As String = Cbx_Filter_Werkzeug.Text
    4. Dim Such_Spalte = Me.DtS_BoPa.DTT_BoPa.Einbauort_1Column.ColumnName
    5. If Such_Ort = ">Alle<" Then
    6. BindingSource1_Filterstring = String.Format("[{0}] Like '{1}'", Such_Spalte, "*")
    7. Else
    8. BindingSource1_Filterstring = String.Format("[{0}] = '{1}'", Such_Spalte, Such_Ort)
    9. End If
    10. BindingSource1.Filter = BindingSource1_Filterstring
    11. End Sub

    Da ist die Suchspalte mit Einbauort_1 vorgegeben

    Habe die mal zum lachen das Project angehängt
    Dateien
    • VB BoP.rar

      (870,97 kB, 75 mal heruntergeladen, zuletzt: )
    Hallo
    Ich habe es mal wieder geschafft mich ein wenig mit meinem Problem auseinanderzusetzen.
    Weiß aber noch nicht wie intensiv. Scheiß Krankheiten :evil:

    ErfinderDesRades schrieb:

    Zum Datenmodell: Du musst iwie versuchen, Datenmodellierung zu verstehen. Wenn jemand sagt: "Einbauort", dann meint er immer Einbauort, also eben wo man was einbaut, er meint die Bedeutung von "Einbauort". Er meint nicht Alter, Gefährdungspotential, Lieferant oder Whatever, sondern er meint Einbauort. In diesem Sinne sind Einbauort_1 bis Einbauort_8 alle das gleiche - es sind Einbauorte.
    Wie gesagt, da muss man eine Tabelle Einbauort schaffen, und vermutlich noch eine Zwischentabelle, damit du jedem DTT_BoPa mehrere Einbauorte zuordnen kannst.


    Ich habe ehrlich gesagt überhaupt keine Vorstellung wie das gemeint ist.

    Könntest du mich ausnahmsweise mal einen großen Schritt weiterbringen ?

    Wenn ich den ganzen privaten Schei... hinter mir habe werde ich mich intensiv mit dem Thema beschäftigen.
    Keine Ahnung, wie ich das anstellen soll.
    Ich kann nur erklären, und mehr Erklärungen, und noch mehr Erklärungen funktionieren irgendwann nicht mehr. Das macht nichts klarer - meine eigene Erfahrung.

    Ich kanns in kleinen Schritten versuchen:
    Kannst du verstehen, dass Einbauort_1, Einbauort_2, Einbauort_3, Einbauort_4, ... , Einbauort_8 alles das gleiche sind, nämlich EinbauOrte?
    Gut - wenn etwas benennbar ist und für Programm wichtig, dann nennt man es inne Datenbänkerei "Entität". Und legt eine Tabelle dafür an.

    weiter:

    trebron57 schrieb:

    Die Einbauorte sind nicht gleich. Ich versuche Heizpatronen zu verwalten. Es kann die gleiche Patrone in Werkzeug 1 oder Werkzeug 2 oder... eingebaut sein
    Das ist ein ganz wichtiger Satz - er benennt zwei weitere Entitäten: HeizPatrone und Werkzeug.

    An diesem Punkt ist bereits klar, dass du mindestens 3 Tabellen brauchst: Heizpatrone, Werkzeug, Einbauort.

    Wie hängen diese Entitäten nun miteinander zusammen - Frage an dich: Welche der folgenden Sätze sind richtig?
    1. Ein Werkzeug hat mehrere Einbauorte für Heizpatronen
    2. Eine Heizpatrone hat je Werkzeug einen Einbauort
    3. Eine Heizpatrone hat je Werkzeug mehrere Einbauorte

    Es können auch mehrere Sätze richtig sein. Oder auch keiner. Oder man würde überhaupt anders formulieren... Korrigiere die Sätze bitte.
    Oha - nochmehr Sätze:
    1. Es gibt unendlich viele Einbauorte
    2. Eine gewisse Anzahl von Einbauorten verteilt sich über alle Werkzeuge
    3. Werkzeuge haben verschieden viele Einbauorte
    4. verschiedene Werkzeuge haben teilweise dieselben Einbauorte

    Zusätzlich kannste auch bischen Prosa schreiben, ganz konkret ein paar Werkzeuge benennen, und deren Einbauorte.
    Punkt 1. nein , es gibt maximal 10 Einbauorte je Werkzeug. Einige Werkzeuge haben einen Einbauort,einige haben 2, u.s.w.
    Punkt 2. ?
    Punkt 3. Ja, von 1 bis 10
    Punkt 4. Ja Kern ist bei allen Werkzeugen vorhanden

    Werkzeug BL ==> EInbauorte: Kern, Zusatz fest 1,Zusatz fest2,Zusatzbew.1,Zusatz bew.2,Anguss1,Anguss2,Vakuum1,Vakuum2,Vakuum3. Das ist das maximum an Orten
    Werkzeug SX ==> Einbauorte: Kern,Anguss1

    Das kann man mit ungefähr 120 Werkzeugen fortführen
    Jo, also zw. Maschine und Einbauort besteht eine ganz typisch m:n-Relation, wie sie im Tut für "Person" und "Beruf" beschrieben ist.



    Aber bei dir gibts ja auch noch Heizpatronen.
    Da vermute ich fast dasselbe:
    1. Es gibt eine endliche Anzahl von Heizpatronen
    2. Jede Heizpatrone kann an bestimmten Einbauorten verbaut werden - an anderen nicht

    Nun die Frage: Wenn alle Einbauorte einer Heizpatrone bestimmt sind - ist damit auch festgelegt, in welche Maschinen sie eingebaut werden kann?
    (Falls nicht, wäre bisserl Prosa vielleicht wieder hilfreich)
    Ja, deine Vermutungen stimmen.
    Zu Punkt 2: Es gibt eben verschiedene Längen,Durchmesser ,Leistung und Anpassung

    Zu deiner Frage: Bei den bisher bekannten Maschinen ja.
    Wenn es neue Maschinen gibt bekomme ich Vorgaben von Länge, Durchmesser u.s.w.
    Dann muss ich sagen "passt", die Patrone haben wir und die neue Maschine und Einbauort eingeben.
    Wenn wir die Patrone nicht haben muss ich sie bestellen und dann eingeben.
    Ich hab mal eine Anwendung gebastelt.

    Die Maschine "M1" ist angewählt, und man sieht in "Einbau nach Maschine", dass "M1" 2 EinbauOrte hat: "Oben" und "Unten".
    Der EinbauOrt "Oben" ist auch angewählt, und man sieht in "Patrone nach EinbauOrt", dass es 2 Patronen gibt, die dort verbaut werden können.
    Um zu sehen, welche Patronen in M1 Unten verbaut werden können, müsste man den entsprechenden EinbauOrt anwählen.

    Das sind nur die primitivsten Ansichten, die sich quasi logisch aus dem Datenmodell ergeben:


    Die Stammdaten-Ansicht ermöglicht dir, alle Daten einzugeben, inklusive der Zuordnungen von Maschinen, Patronen, EinbauOrten

    Weitere Ansichten wären auf dem anneren Tabs des TabControls anzubringen.
    Vom Konzept her sollte es für jede ansicht ein UserControl geben, welches dann auf seine eigene Tabpage kommt.
    Da käme etwa ein ucl in Frage, was dein EingangsPost-Problem löst: Also dass da iwie ein Filter gebastelt wird, der halt aus Patronen, EinbauOrten, Maschinen genau das anzeigt, was von Interesse ist.



    Möglicherweise eine gute Idee ist, du schreibst, was du davon verstehst, und was nicht.
    Dateien
    @ErfinderDesRades
    Vielen Dank, sieht sehr Erfolgsversprechend aus, werde ich mich demnächst intensiv mit beschäftigen.
    Danke nocheinmal

    @ all
    In Post3 hat ErfinderdesRades ja eine Lösung geschrieben, welche mir alle Einträge aus den Columns in der Combobox gezeigt wird
    Wie muss ich dann jetzt folgendes umbauen damit in allen Columns gesucht wird

    VB.NET-Quellcode

    1. Private Sub Bilde_Werkzeug_Filter()
    2. If Cbx_Filter_Werkzeug.SelectedIndex = -1 Then Return
    3. Dim Such_Ort As String = Cbx_Filter_Werkzeug.Text
    4. Dim Such_Spalte = Me.DtS_BoPa.DTT_BoPa.Einbauort_1Column.ColumnName
    5. If Such_Ort = ">Alle<" Then
    6. BindingSource1_Filterstring = String.Format("[{0}] Like '{1}'", Such_Spalte, "*")
    7. Else
    8. BindingSource1_Filterstring = String.Format("[{0}] = '{1}'", Such_Spalte, Such_Ort)
    9. End If
    10. BindingSource1.Filter = BindingSource1_Filterstring
    11. End Sub

    In Zeile 4 steht ja als Suchspalte Einbauort_1, es sollte aber in allen Einbauorten gesucht werden

    trebron57