Announcement

Collapse
No announcement yet.

Comboboxen füllen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Comboboxen füllen

    Hallo,

    ich weiß das Thema im allgemeinen wurde schon sehr oft behandelt allerdings hat mich das alles nicht wirklich weiter gebracht.

    Folgendes ich habe eine Combobox cmbVerlag in dieser Combobox sollen die Verlage aus einer Accesstabelle Names "Verlag" drin stehen.

    Allerdings sind in der Accesstabelle zwei Spalten belegt ( VerlagID und Verlag) allerdings soll nur der Verlag in der cmbVerlag angezeigt werden. Die verknüpfung mit der ID soll aber trotzdem bestehen bleiben!! Da ich die Daten nachher in eine weitere Tabelle namens Buch speichern will. In dieser Tabelle soll aber lediglich dann die richtige VerlagID drin stehen.

    Ich hoffe ihr könnt mir helfen mein Problem zu lösen.

    Güße Lenele

  • #2
    Hallo,

    die ComboBox hat die Eigenschaften DataSource für die Datenquelle, also eine Liste, DataTable, etc.

    Mit der Eigenschaft DisplayMember wird festgelegt welche Eigenschaft eines Elements der Datenquelle angezeigt wird.

    Mit der Eigenschaft ValueMember wird der Wert eines Elements der Datenquelle gebunden.

    D.h.
    [highlight=vbnet]
    comboBox1.DisplayMember = "Verlag"
    comboBox1.ValueMember = "VerlagID"
    comboBox1.DataSource = meineListeMitdenEinträgen
    [/highlight]

    mfG Gü
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      Hallo,

      danke für deine schnelle antwort. Hab das jetzt eingebaut, bekomme aber trotzdem keine Rückgabewerte angezeigt.

      Mein Code für diesen Teil lautet

      Code:
      Private Sub cmbVerlagID_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmbVerlagID.SelectedIndexChanged
              _connVerlag = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Visual Studio\Buecherverwaltung\Buecherverwaltung\bin\Debug\Buecherverwaltung.mdb;User Id=admin;Password=;")
              _cmdVerlagID = New OleDbCommand("Select Verlag, VerlagID  From Verlag", _connVerlag)
              '_da = New OleDbDataAdapter(_cmdVerlagID)
      
              cmbVerlagID.DisplayMember = "Verlag"
              cmbVerlagID.ValueMember = "VerlagID"
              cmbVerlagID.DataSource = _cmdVerlagID
      
          End Sub
      Fehlt da nicht noch die Ausgabe??
      Oder hab ich jetzt was zu viel gemacht?? Ich steh grad echt auf dem SChlauch.

      Gruß Lenele

      Comment


      • #4
        Hi,

        ich kenn mich in ADO.net zu wenig aus, aber du hast als Datenquelle den SQL-Befehl gesetzt. Das reicht nicht.

        Mit dem DataAdapter (oder sonst was) müssen die Daten von der Datenbank geholt werden und ein DataTable geschrieben werden und dieses als Datenquelle verwenden.

        mfG Gü
        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

        Comment


        • #5
          Ok ich werde es mal versuchen.

          Danke für deine Hilfe.

          Gruß Lenele

          Comment


          • #6
            Hallo,

            als Ergänzung zu Güs Antwort: Eine Einführung in ADO.NET findest Du in Einstieg in VB 2008 Kap.8 oder in VB 2005 Kap.26 oder in Visual C# Kap.25 ff.

            Jürgen

            Comment


            • #7
              Hallo nochmal,

              also irgendwie steh ich total auf dem Schlauch hab mir das jetzt alles durchgearbeitet und versucht zu realisieren aber es funktioniert irgendwie immernoch nicht ich bekomme immer einen Fehler.

              Hier nochmal mein Überarbeiteter Code vielleicht kann mir doch jemand anhand meines Codes sagen was ich falsch mache.

              Code:
              Dim _connVerlag As OleDbConnection
                  Dim _cmdVerlagID As OleDbCommand
                  Dim _da As OleDbDataAdapter
                  Dim _dt As DataTable
                  Dim _dv As DataView
                  
                  Private Sub cmbVerlagID_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
                      _connVerlag = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Visual Studio\Buecherverwaltung\Buecherverwaltung\bin\Debug\Buecherverwaltung.mdb;User Id=admin;Password=;")
                      _cmdVerlagID = New OleDbCommand("Select Verlag, VerlagID  From Verlag", _connVerlag)
                      _da = New OleDbDataAdapter(_cmdVerlagID)
                      Dim ds = New DataSet
                      _da.Fill(ds, "Verlag")
                      _dt = ds.Tables.Item("Verlag")
                      _dv = ds.DefaultViewManager.CreateDataView(_dt)
              
                      'Eigenschaft, gibt den Namen der Spalte an, die im Listenfeld als Text gezeigt wird
                      cmbVerlagID.DisplayMember = "Verlag"
                      'Gibt den Namen der Spalte an, die über den Listeneintrag auskunft gibt
                      cmbVerlagID.ValueMember = "VerlagID"
                      'Hier wird die Datenquelle bekannt gegeben
                      cmbVerlagID.DataSource = _dt
              
              
                      'Übertragung der Spaltenbezeichnungen in die Combobox
                      Dim VerlagAnzeige As DataColumn
                      For Each VerlagAnzeige In _dt.Columns
                          cmbVerlagID.Items.Add(VerlagAnzeige.ColumnName)
              
                      Next
                      cmbVerlagID.SelectedIndex = 2
                  End Sub
              Vielen dank schonmal im Voraus für eure Hilfe und eure Bemühungen

              Comment


              • #8
                Hallo,

                [highlight=vbnet]
                Imports System
                Imports System.Data
                Imports System.Data.OleDb
                Imports System.Windows.Forms

                Namespace WindowsFormsApplication1
                Public Partial Class Form1
                Inherits Form
                Public Sub New()
                InitializeComponent()
                End Sub

                Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs)
                ' Verbindung herstellen - dabei wird using verwendet um nach Ende
                ' dieses Blocks alle Ressourcen dieser Verbindung korrekt zu
                ' beenden. Desweiteren wird die Verbindungzeichenfolge aus der
                ' Konfigurationsdatei gelesen. Dies hat den Vorteil dass sie geändert
                ' werden kann ohne die Anwendung neu kompilieren zu müssen.
                Using conn As New OleDbConnection(Properties.Settings.[Default].TestConnectionString)
                ' SQL-Command erstellen:
                Dim cmd As New OleDbCommand("SELECT Verlag, VerlagID FROM Verlag", conn)

                ' DataAdapter:
                Dim da As New OleDbDataAdapter(cmd)

                ' DataSet:
                Dim ds As New DataSet()

                ' DataSet füllen:
                da.Fill(ds, "Verlag")

                ' Daten an ComboBox binden:
                comboBox1.DisplayMember = "Verlag"
                comboBox1.ValueMember = "VerlagID"
                comboBox1.DataSource = ds.Tables("Verlag")
                End Using
                End Sub

                Private Sub comboBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
                Me.Text = comboBox1.SelectedValue.ToString()
                End Sub
                End Class
                End Namespace
                [/highlight]

                Wie du also siehst wäre dein 'Übertragung der Spaltenbezeichnungen in die Combobox nicht notwendig gewesen da schon alles erledigt wurde.

                mfG Gü
                "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                Comment


                • #9
                  Danke für deine schnelle Hilfe es funktioniert jetzt soweit.

                  MFG Lenele

                  Comment


                  • #10
                    Sorry dass ich nochmal stör. ES funktioniert ja jetzt hab auch kapiert was ich falsch gemacht habe.

                    Nun ist nur noch eins, wenn ich das Buch jetzt änder und den Verlag ändern will, dann muss ich ja den Text irgendwie wieder der passenden ID zuweisen wie macht man dass denn, damit das zu dem Passt, was ich ausgewählt hab.

                    MFG

                    Lenele

                    Comment


                    • #11
                      Kurze Zwischenfrage: Welche Version des Framework verwendest du? 2.0 oder 3.5.
                      Je nachdem kann eine (elegantere) Lösung gefunden werden.

                      mfG Gü
                      "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                      Comment


                      • #12
                        Wenn ich dein Problem richtig verstehe, dann wird bei Auswahl des nächsten Buches, der Verlag nicht verändert obwohl dieser ein anderer wäre oder? Du kannst das entsprechende Item in der Combobox über die Eigenschaft SelectedValue einstellen.
                        [highlight=vbnet]

                        'datensatz.verlagid steht hier für die Verlagsid die der Datensatz von deinem Buch enthält.
                        cmbverlag.selectedvalue = datensatz.verlagid
                        [/highlight]
                        Unsere Jugend ist unerträglich, unverantwortlich und entsetzlich anzusehen! - Aristoteles

                        Comment

                        Working...
                        X