Announcement

Collapse
No announcement yet.

Probleme mit ListBox/ComboBox und DataSource

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

  • Probleme mit ListBox/ComboBox und DataSource

    Holdrio,
    .
    irgendwas funzt bei mir hier nicht richtig:
    .
    C#-Code:
    this.lstBx_Ansprechpartner.DataSource = Ergo.MainApp._EmployeeDB._EmployeeDS;
    this.lstBx_Ansprechpartner.DisplayMember = "Mitarbeiter.Name";
    .
    this.txtBx_Name.DataBindings.Add("Text", Ergo.MainApp._EmployeeDB._EmployeeDS, "Mitarbeiter.Name");
    .
    .
    naja da passiert nix, dabei ist das Dataset 100% gefüllt.
    An anderer Stelle ich meinem Programm mache ich genau das gleiche, und es ging sofort einwandfei...
    .
    Ähnliches Problem bei der schon "besprochenen" ComboBox.
    Da tut sich nix, egal ob ich den TableName nochmal mit angebe oder nicht.
    .
    C#-Code:
    this.cmbBx_Empfaenger.DataSource = Ergo.MainApp._ErgoDB._SelFirmsDS;
    // this.cmbBx_Empfaenger.DisplayMember = "Mitarbeiter.Name";
    // this.cmbBx_Empfaenger.ValueMember = "Firmen.ID_Firma";
    try
    {
    int length = Ergo.MainApp._ErgoDB._SelFirmsDS.Tables["Firmen"].Rows.Count;
    for(int i=0; i<length; i++)
    this.cmbBx_Empfaenger.Items.Add(Ergo.MainApp._Ergo DB._SelFirmsDS.Tables["Firmen"].Rows[i].ItemArray[0]);
    }
    catch (Exception ex)
    {
    MessageBox.Show(ex.Message, "Fehler beim setzen der DataSource und laden der Daten");
    }
    .
    .
    nehme ich das auskommentierte wieder rein und die forschleife raus, passiert nix.
    egal wie ich DisplayMember angebe. Bestenfalls wird eine lange, aber leere Klappliste bei der ComboBox geöffnet.
    Die Daten erscheinen aber NUR bei der FOr schleife?!?!?
    (und da ist es egal ob ich bei DisplayMember "TableName.ColumnName" oder nur "ColumnName" schreibe)
    .
    Ich weiss echt nicht welchen komischen Verdreher ich hier drin habe.
    Ich bin zwar noch relaitv neu in .Net/Ado.Net, aber mein Programm ist mittlerweile schon recht umfangreich, und zumindest die listbox hab ich schon mal erfolgreich gefüllt (meine ComboBoxen aber immer über For-schleifen...

  • #2
    Hallo,
    was passiert, wenn die ComboBox über den folgenden Weg an die Datenquelle gebunden wird?
    <code>
    cmbBx_Empfaenger.DataSource = Ergo.MainApp._ErgoDB._SelFirmsDS.Firmen;
    cmbBx_Empfaenger.DisplayMember = "ID_Firma";
    </code>
    Das geschilderte Problem tritt auf, weil DisplayMember und ValueMember auf zwei unterschiedliche Tabellen (DataTable-Instanzen) im DataSet verweisen, so dass die Zuordnung der zusammengehörenden Einträge nicht möglich ist

    Comment


    • #3
      hm ja dummer Copy/Paste Fehler.
      Vergiss den ValueMember mit der anderen Tabelle, das gehört da nicht hin.
      ::
      this.cmbBx_Empfaenger.DataSource = Ergo.MainApp._ErgoDB._SelFirmsDS;
      this.cmbBx_Empfaenger.DisplayMember = "Mitarbeiter.Name";
      ::
      .
      das hier, für sich alle genommen, funtz nicht. Warum auch immer.
      Der ListBox Mist hat sich erledigt..

      Comment


      • #4
        naja ich glaube ich habe die Ursache gefunden.
        Wenn meine ComboBox nicht im DropDown Event, sondern beim start des Programmes gefüllt wird funzt
        .
        C#-Code:
        this.cmbBx_SelectProjekte.DataSource = ergoDB._ProjectsDS.Tables["Projekte"];
        this.cmbBx_SelectProjekte.DisplayMember = "BV_Name";
        this.cmbBx_SelectProjekte.ValueMember = "ID_Projekt";
        .
        .
        .
        einwandfrei.
        Aber mit eklatanten Nachteilen!
        .
        Sorted Property:
        Setze ich die Sorted Property auf true, gilt das nur für die DisplayMember, aber NICHT für die ValueMember. Folge: Die SelectedValue Property liefert den falschen Wert (ich wähle 2.Element der SORTIEREN ComboBox Liste und bekomme den Value des 2. Elementes in der Tabelle (nicht sortiert), was also nicht passt. Ich brauche es aber sortiert....
        .
        Erster Eintrag in der ComboBox:
        Startet das Programm, ist sofort der erste Eintrag lesbar. Fülle ich die Box aber per forschleife, bleibt das Textfeld der Box solange leer, bis ich ein Element explizit auswähle. Das muss auch so sein, weil sobald ein Element gewählt ist, massig Funktionen ausgeführt werden. Die werden so sofort ausgeführt, dabei hat der user noch nix gewählt. Sehr suboptimal.
        .
        Erstelle meine DataSources erst zur Laufzeit:
        Diesen ComboBox-Füller beim programmstart kann ich NUR bei einer ComboBox machen, alle anderen DataSourcen können erst zur Laufzeit erstellt werden.
        Damit ich die DataSourcen schon vorher setzen kann, müsste ich ja demenstprechend alle meine DataSets beim Programmstart initialisieren und mit leeren Tabellen füllen. damit die Bindings keine Fehler liefern.
        Ebenfalls sehr suboptimal.
        .
        .
        Nun stehe ich da. Meine ComboBox muss dummerweise mit zusammengesetzen Strings (ProjektNr + ProjketName) gefüllt werden.
        Wird eines ausgesucht, müssen aber beie werte getrennt weiterverarbeitet werden.
        Sie mir dann wieder aus den strings rauszufriemeln, gibt nen nerviges Gehacke.
        Daher hätte ich schon gerne die ValueMember Property, aber so geht es ja nicht...
        Und sie per Hand in der For schleife selber füllen geht auch nicht....
        .
        Ist C# da so sch**sse, oder hab ich irgendwo was gewaltig zersägt bei mir

        Comment


        • #5
          Doppelt gestellte Frage - siehe ADO.NET-Ordne

          Comment

          Working...
          X