none
Combobox Eintrag füllen RRS feed

  • Frage

  • Hallo zusammen,

    ich benötige bitte Eure Hilfe, da ich nicht weiterkomme. Habe schon einen Tag  mit suchen verbracht....

    Ich habe ein Fenster mit einer Combobox, welche "Kategorien" enthält durch eine Klasse mittels Linq2SQL gefüllt wird.

    Beim Fenster öffnen, wird dann auf einer Datenbank nach einem Eintrag gesucht (Die ID wird mitübergeben). Er soll dann den Datensatz in die jeweiligen Formularfelder füllen. Das Problem ist jetzt, bei manchen Comboboxen füllt er das Feld dann und bei machen nicht und ich weiß nicht warum.

    Könnt Ihr mir den richtigen Tipp geben?

    Im Bild sieht man (im oberen Teil), das nichts übertragen wird und im unteren Teil, das die Combo gefüllt ist, z.B. bei einem neuen leeren Datensatz

    Gruß Daniel

    Hier der Code

    ' Klasse für Kategorien laden
    Public Function KategorieLaden()
            Try
                Dim a = From e In _L2SQL.PEDB_Kategorie
                Select e.KategorieID, e.Kategorie
    
                Return a
    
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
    
    End Function
    
    
    ' beim Öffnen des Fensters die Kategorien in Combobox laden
     Private Sub KategorieLaden()
    
            Dim _Data As New clsData
    
            Me.cbKategorie.ItemsSource = _Data.KategorieLaden
            Me.cbKategorie.DisplayMemberPath = "Kategorie"
            Me.cbKategorie.SelectedValuePath = "ID"
    
     End Sub
    
    ' Eintrag vom Server laden und in Felder füllen
      Private Sub EintragLaden()
    
            Try
                Dim _EintragID As String
                _EintragID = Me.tbID.Text
    
                If _EintragID = "" Then
                    Exit Sub
                End If
    
                Dim a = (From e In _L2SQL.PEDB_Eintrag
                Where e.ID = _EintragID
                Join m In _L2SQL.PEDB_Mitarbeiter On m.Personalnummer Equals e.Personalnummer
                Select m.Personalnummer, m.MAName, e).FirstOrDefault
    
                Me.cbKategorie.SelectedItem = a.e.Kategorie
                Me.cbKategorie2.Text = a.e.Kategorie2
                Me.tbOrt.Text = a.e.Ort
                Me.tbTitel.Text = a.e.Titel
                Me.cbMonat.Text = a.e.Monat
                Me.cbJahr.Text = a.e.Jahr
                Me.tbBemerkung.Text = a.e.Bemerkung
    
    
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
    
        End Sub


    • Bearbeitet DanWe1 Donnerstag, 21. November 2013 13:29
    Donnerstag, 21. November 2013 13:22

Antworten

  • also ich habs. Wenn ich schreibe Me.cbKategorie.text dann geht es

    Danke Euch

     Me.cbKategorie.Text = a.e.Kategorie

    Montag, 25. November 2013 08:46

Alle Antworten

  • Hallo,
    beim zuweisen von SelectedItem wird vorraus gesetzt, das es auch das richtige Item ist. Vereinfacht gesagt, wenn du eine Klasse mit der Property MyString (vom Typ String) hast und du diese 2 mal erstellst:

    Dim i1 As MyClass with { .MyString = "String" }
    Dim i2 As MyClass with { .MyString = "String" }

    Dann sind i1 und i2 nicht das selbe. Entsprechend würde i2 nicht ausgewählt werden, wenn nur i1 in der ComboBox steht. Das wäre das einzige, was ich mir hier "schnell" vorstellen kann.

    Es ist auch etwas schwer durch deinen Code durch zu blicken, da solche Abfragen häufig mit vielen verschiedenen Typen etc. verbunden sind. Kannst du uns vielleicht ein Minimalbeispiel mit den dazugehöhrigen Kalssen geben?

    Zusätzlich solltest du vor der Ausgabe in die ganzen COntrols einen BreakPoint setzen (F9). Damit kannst du dann den Wert von a bestimmen [1] ob dieser überhaupt korrekt ist. Wenn nicht, dann liegt es wahrscheinlich an der Abfrage.

    [1] Wenn der Debugger anhält, dann kannst du einfach auf den Variablennamen zeigen. Dadurch wird dir der Wert verraten durch ein Klick auf das kleine + vor den Eigenschaftennamen erfährst du die jeweiligen Untereigenschaften.


    Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets   C# ↔ VB.NET Konverter
    Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.

    Donnerstag, 21. November 2013 15:11
    Moderator
  • Hallo nochmal,

    kann ich eine Zip Datei hochladen?

    Donnerstag, 21. November 2013 15:51
  • Am einfachsten über Skydrive.

    Kurzanleitung: Einfach auf skydrive.com gehen, ggf. mit dem Microsoftkonto anmelden, und die Datei per Drag and Drop auf die weiße Fläche ziehen. Anschließend machst du einen Rechtsklick auf die Hoch geladene Datei und wählst Teilen. Unter Link abrufen kannst du dann einen Link generieren, den du uns dann postest.


    Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets   C# ↔ VB.NET Konverter
    Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.

    Donnerstag, 21. November 2013 16:05
    Moderator
  • so, hier der Code. Ich hoffe es ist verständlich. Der Connectionstring zur Datenbank muss halt noch angepasst werden.

    Programmcode

    Freitag, 22. November 2013 05:06
  • Hallo,
    das Projekt scheint ziehmlich leer zu sein. Die Datenbank ist zwar da, aber sonst ist alles wie ein leeres Projekt.

    Wenn ich jetzt aber mal raten müsste, dann würde ich sagen das es an den Anonymen Klassen liegt, die du mit LINQ erzeugst.

    Anonyme Typen sind nur gleich, wenn auch die Eigenschaften und deren Werte übereinstimmen. Wenn du also im ItemsSource die Kategorie und KategorieID nutzt, und dem Typ beim zuweisen die KategorieID fehlt, funktioniert es nicht.

    Me.cbKategorie.SelectedItem = New With {Key .KategroieID = a.e.KategorieID, Key .KategorieID = a.e.KategorieID}
    Obige Codezeile würde also einen neuen anonymen Typen erstellen, der gleich zu dem ist, der in ItemsSource benutzt wird.


    Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets   C# ↔ VB.NET Konverter
    Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.

    Freitag, 22. November 2013 18:08
    Moderator
  • Guten Morgen,

    ich habe scheinbar das falsche Projekt hochgeladen.

    Ich habe nochmal den Link eingebunden.

    https://skydrive.live.com/redir?resid=DA2D926C87FD832B!1603&authkey=!AFWmwkxeqcylsbs&ithint=file%2c.zip

    So ganz steig ich da noch immer net durch....

    Gruß Daniel

    Montag, 25. November 2013 05:55
  • also ich habs. Wenn ich schreibe Me.cbKategorie.text dann geht es

    Danke Euch

     Me.cbKategorie.Text = a.e.Kategorie

    Montag, 25. November 2013 08:46
  • Hallo DanWe1,

    Es freut uns, dass Du Dein Problem lösen konntest und danke, dass Du Deine Lösung hier im Forum gepostet hast. Jetzt können auch andere die das gleiche Problem haben unter Umständen davon profitieren.

    Danke und Gruss,

    Ionut


    Ionut Duma, MICROSOFT   Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-PrinzipEntwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Donnerstag, 28. November 2013 16:13
    Moderator