Richtiges Binden von ComboBoxen an DataTables im typ. DataSet

  • VB.NET

Es gibt 36 Antworten in diesem Thema. Der letzte Beitrag () ist von sonne75.

    ErfinderDesRades schrieb:

    Was willst du mit der Id vom Datensatz?
    Du hast doch den Datensatz.

    Wenn ich die ComboBox manuell über LINQ belade, habe ich keinen Datensatz.

    ErfinderDesRades schrieb:

    Gugge im Designer die Properties der BindingSources an.

    Darauf bin ich gerade selbst gekommen, ich sehe es jetzt.

    ErfinderDesRades schrieb:

    Die zusammengesetzten Strings kannst du glaub am einfachsten über berechnete Spalten modellieren.

    Meinst du, ich brauche noch eine Spalte in der Tabelle, in der ich beide Strings verknüpfe? Das wäre natürlich eine tolle Möglichkeit, um auf die .DataSource nicht verzichten zu müssen.
    Wie kann ich denn in die berechnete Spalte noch "-" dazwischen setzen?

    Einfach "OrgByteValue+OrgByteTitle" funktioniert. Aber ich will noch Bindestrich setzen? Geht es so nicht? Muss ich noch eine extra Spalte mit "-" hinzufügen?

    EDIT: Ich habe es, man muss statt "-" einfach '-' nehmen. :thumbup:

    Das ist echt eine super Möglichkeit alles zu automatisieren, alleine wäre ich nie drauf gekommen, danke schön! :thumbup:

    Jetzt muss ich nur überlegen, wie ich es gescheit nach "oben" weitergebe, sprich dieses Profil dann dem Sensor zuweise. Aber eigentlich erstelle ich ja eine neue SensorRow und da ist ProfilID drin, sprich die ProfilRow, die ich mit "frmSensor.ProfilBindingSource.At(Of ProfilRow)" rausbekommen müsste.

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

    Ich habe leider wieder eine Schwierigkeit entdeckt. ;(

    In der Profiltabelle kann es passieren, dass es zwei Mal den gleichen "TypeByteTitle" und "TypeByteValue" gibt, weil da "ProfileCommandID" unterschiedlich ist. Das habe ich total vergessen, weil es in der Spezifikation so nicht steht, ich musste es aber so abspeichern, weil die Weiterverarbeitung auf 2 Arten geschieht, je nach dieser ID.

    In der ComboBox will ich aber nur einmal den Namen stehen haben, weil es trotzdem nur ein Profil nach der Spezifikation ist (er kann 2 verschiedene Weiterverarbeitungsarten enthalten, je nach weiteren Parameter, die ich alle in der Tabelle "ProfilCommand" untergebracht habe). D.h. der User muss nur "TypeByteValue" auswählen.

    Zumal es Schwierigkeiten mit Profilzuweisung an Sensoren gibt, wenn es statt einem Profil-ID plötzlich 2 gibt. ;( Ach Mist, ich war so froh, dass das Datenmodell fertig war.

    Kann man es überhaupt irgendwie anders im Datenmodell unterbringen? Ein Profil kann ab und zu 2 verschiedene Verarbeitungsarten haben (die z.B. von einer anderen Variable abhängen), wie kann ich sowas speichern?
    Ja, aber es muss ja eine Verbindung zu Funktionen geben, welche jetzt zu welcher Art gehören.

    Ich habe jetzt das Datenmodell umgestrickt, die ProfilCommandID kommt in die MapProfFunc (Routertabelle zwischen Profilen und Funktionen), damit man sofort sieht, zu welcher Art diese Funktion in diesem Profil jetzt gehört. Und die Profiltabelle hat eine Bool-Spalte "HasCommandID" bekommen, damit ich weiß, wann ich überhaupt darauf prüfen muss.
    Muss jetzt halt den ganzen Code umschreiben, weil die AddXXXRow() nicht mehr passt.
    Ja, ich habe das damals durchgelesen, aber bisher sieht mein Modell schlüssig aus. Ich habe schon alle Anpassungen (sind ja nur 2000 Zeilen Code :whistling: ) gemacht, bin gerade am Implementieren, dass das Profil zum Sensor und Sensor zum ReceiverChannel zugeordnet wird.
    Dafür habe ich ja dein Beispielprojekt, welches du mir damals erstellt hast, da kann ich einiges davon gebrauchen bzw. nach Mustervorlage anpassen. :thumbup:

    EDIT: wenn ich was gut kann, dann ist es Mustererkennung. ;)

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

    Ich habe noch einige Fragen. Ich habe ein Login-Form und dann wird Main-Form gestartet.

    VB.NET-Quellcode

    1. Friend WithEvents frmMain1 As frmMain
    2. ........
    3. Sub....
    4. My.Application.ChangeUICulture(Language)
    5. frmMain1 = New frmMain
    6. frmMain1.ShowDialog()


    Bei der Zeile 5 kommt schon dieses Fenster:

    Wie kann ich es abstellen?

    Dann noch eine Frage:
    Ich würde gerne im DGV für Kanäle gleich die zugehörige Daten für Sensore anzeigen (eine Spalte aus der Sensor-Tabelle), geht das überhaupt?


    Wenn ich es über ComboBox und SensorBindingSource löse, dann knallt es bei der Zuweisung der SensorRow für die ReceiveChannel-Tabelle (letzte Zeile):

    VB.NET-Quellcode

    1. Dim rwChan = ReceiveChannelBindingSource.At(Of ReceiveChannelRow)()
    2. Using frmSensor As New Form1
    3. Select Case frmSensor.ShowDialog(Me)
    4. Case DialogResult.OK
    5. Dim rwProfile = frmSensor.ProfileBindingSource.At(Of ProfileRow)()
    6. Dim rwSensor = DtsTest.Sensor.AddSensorRow(rwProfile, String.Empty, String.Empty, 0, 0, String.Empty)
    7. rwChan.SensorRow = rwSensor


    Und dritte Frage: kann man die Spaltennamen auch sprachenabhängig machen (die im DGV angezeigt werden), wie andere Controls?
    zu 1: steht da doch inne Meldung: Du hast noch kein Datenfile - jedenfalls er kennt es nicht.
    Und wenn du nun einfach weiter machst, dann generiert er dir eines, allerdings leer.
    Bei weiteren Starts hast du dann eines, und die Meldung bleibt logisch weg.

    zu 2: Das geht mit ComboboxDatagridViewColumns - sowas nennt man den Joining-View.

    zu 3: Ich sehe in deim Bild keine Combobox. Ich sehe auch keinen Zusammenhang zw. Frage 2 und dem Code in Frage 3. Aber Frage 3 will "es" lösen, was immer das sein mag :?:

    ErfinderDesRades schrieb:

    Bei weiteren Starts hast du dann eines, und die Meldung bleibt logisch weg.

    Ich habe diese Meldung bei jedem Start.

    ErfinderDesRades schrieb:

    Das geht mit ComboboxDatagridViewColumns - sowas nennt man den Joining-View.

    Ja, habe ich ausprobiert, ich bekomme eine Exception (nach der Zeile "rwChan.SensorRow=rwSensor"):

    EDIT: nehme alles zurück, es lag daran, dass ich kein ValueMember eingestellt habe. :whistling:

    Bei der Frage 3 ging es darum, ob die Spaltennamen im DGV mehrsprachig sein können. Aber mir ist es gerade eingefallen, dass es nichts mit DataSet zu tun hat und ich es somit gut über Mehrsprachigkeit lösen kann.

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

    du kannst über die Dataset.DataFile(path)-Extensions dem Dataset mitteilen, wo es persistieren soll.
    Ansonsten persistiert es in einen defaultmäßig generierten Path, den kannst du übrigens mit myPath = Dataset.DataFile() auch abrufen. (also die Überladung ohne Argument)
    Ah, das habe ich in deinem DataSet-Beispiel an mich gesehen. In "New" war es, oder? D.h. ich gebe da einfach meinen Pfad rein, damit es gleich bei New lädt und nicht erst später bei "Load"? Oder ist es unabhängig voneinander?
    Zur Zeit ist es ein .ReadXML(path) in Load.