C# ComboBox Datenbinding nullValue

raptor trx

Lt. Junior Grade
Registriert
Mai 2006
Beiträge
294
Hi@all,

ich kämpfe schon seit Tagen mit einem Problem bei der Datenbindung von Comboboxen in Windows Forms.

in einem Dialog bearbeite ich einen Artikel, dessen Klassendefinition wie folgt aussieht:

Code:
    public partial class Item
    {
     .
     .
     public Nullable<System.Guid> ItemGroupId { get; set; }

     public virtual ItemGroup ItemGroup { get; set; }
     .
     .
     .
    }

Über ein DropDown kann die Artikelgruppe des Artikel gesetzt werden (die ItemGroup Eigenschaft der Klasse Item).

Beim Laden des Dialogs fülle ich die ComboBox:

Code:
private void FillComboboxes()
    {
       this.itemGroupCollection = this.itemGroupBussines.GetItemGroupCollection().ToList();

       this.cboItemGroup.DisplayMember = "Name";
       this.cboItemGroup.ValueMember = "ItemGroup";
       this.cboItemGroup.DataSource = this.itemGroupCollection;
    }

Dann führe ich die Datenbindung aus:

Code:
 private void DataBinding()
    {
       this.cboItemGroup.DataBindings.Clear();
       this.cboItemGroup.DataBindings.Add("SelectedItem", this.Item, "ItemGroup", false,  DataSourceUpdateMode.OnValidation, this.itemGroupCollection.FirstOrDefault(x => x.Standard.HasValue && x.Standard.Value));
    }

Das funktioniert soweit alles wie es soll. Das letzte Argument der DataBindings.Add() Methode sorgt dafür, dass wenn im Artikel keine ArtikelGruppe gesetzt ist, da ein Wert aus der Artikelgruppenliste (itemGroupCollection) genommen wird bei dem der Boolsche Wert "Standard" auf true gesetzt ist. Das funktioniert soweit auch. Also wenn ich in dem Dialog einen Artikel öffne bei dem die Eigenschaft ItemGroup null ist, wird in der ComboBox die Artikelgruppe ausgewäht bei der das "Standard" Flag true ist. Soweit ganz gut, aber wenn ich den Artikel speichern möchte soll die in der Combobox ausgewählte Artikelgruppe im Artikel gesetzt werden, das funktioniert aber nur wenn diese nicht die "Standard" Gruppe ist. Also beißt es sich irgenwie mit dem nullValue in der Bindung.

Wie kann ich den Wert der Combobox trotzdem überhmen auch wenn dieser über das nullValue gesetzt wurde?

Gruß
 
Okay, da ich für gewöhnlich nur WPF nutze habe ich leider keinen Plan von WinForms, da ich dann aber doch helfen wollte, habe ich ein bisschen gesucht und außer deinem Thread bei StackOverflow leider nichts gefunden :D.

Also kurz selbst ran und festgestellt, WinForms und Databinding ich weiß ja nicht :freak:. Aber schlussendlich hat in meinem Testprojekt folgendes funktioniert:
Code:
comboBox1.DataBindings.Add(new Binding("SelectedItem", this, "Selected", true, DataSourceUpdateMode.OnPropertyChanged, persons[0]));
            comboBox1.DataBindings.Add(new Binding("SelectedValue", this, "Selected", true, DataSourceUpdateMode.OnPropertyChanged));
Dazu muss dann auch noch die Liste, von der die Items kamen eine ObservableCollection sein. Ich bin mir jetzt nicht 100% sicher ob es hilft, es ist aber zumindest ein Ansatz. Ansonsten könntest du den Wert auch ganz allgemein im Code setzen.

PS: Falls jemand Kritik an meiner Meinung äußern möchte bitte gerne per PN, in dem Thread geht es nicht darum ob WinForms gut/schlecht was auch immer ist :evillol:
 
Zurück
Oben