Laden...

BindingSource Interface internal class

Erstellt von Syn vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.626 Views
S
Syn Themenstarter:in
26 Beiträge seit 2006
vor 16 Jahren
BindingSource Interface internal class

Hallo,

ich denke ich habe ein stanadt gui - problem. Unter einem dgv sind mehrere textBoxes die ein neues Item in der Liste erzeugen in denen man aber auch informationen eingeben kann die nicht in der Liste enthalten sind.

Ich benutze eigene Businessobject die dem View aber nur als Interfaces bekannt sind. Der dgv wird mithilfe einer "Listen" - Klasse (class List : IList ) über eine eigene BindingSource befüllt, das funktioniert ohne probleme.

Ich habe also eine neue BindingSource im View erstellt und als DataSource IList angegeben. Die DataSources der TextBoxen habe ich auf die Properties in IList gesetzt.

Das Problem: Es werden weder Daten in den Textboxes angezeigt noch daten an "class List" weitergeleitet.

Und ich habe das unbestimmte Gefühl das es an dem "internal" der Klasse liegt.

Ich habe 3 Projecte (Assemblies): View, Interfaces, Implementation. Der View benutzt, referenziert, nur "Interfaces".

Das Interface:


[Browsable(true)]
public Interface IList
{
[Bindable(true)]
string Beschreibung{get;set;}
}

Die "List" - Klasse:


internal class List : IList
{
 string m_Desc = "Bla Hops"
 public string Beschreibung {
get{return m_Desc;}
set{m_Desc = value;}
}
}

Der Code im View:



...
bindingSource1 = new BindingSource();
            bindingSource1.DataSource = m_Controller.ClassificationAttributeList;
this.textBox_Description.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.bindingSource1, "Description", true));
...


MfG
Dominik

915 Beiträge seit 2006
vor 16 Jahren

Hrm, du addest die daten aber auch über bindingSource1.Add ?
Denn wenn die Daten über deine myList.Add füllst passiert nichts:o)

Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(

S
Syn Themenstarter:in
26 Beiträge seit 2006
vor 16 Jahren

Meine Anahme ist das wenn ich etwas in das Textfeld schreibe das dann diese Daten auch in den Properties der List auftauchen????

Ich werde das mit dem .Add() mal ausprobieren.

S
Syn Themenstarter:in
26 Beiträge seit 2006
vor 16 Jahren

Ich hoffe du hast das folgende gemeint:


bindingSource1 = new BindingSource();
bindingSource1.DataSource = typeof (IList);
bindingSource1.Add(m_List);

Leider funktioniert das auch nicht. Ich habe Breakpoints bei den get; set; methoden der Properties und es wird nicht darauf zugegriffen.

Ist meine Vorgehensweise falsch?

915 Beiträge seit 2006
vor 16 Jahren

Meinte eher das hier:


bindingSource1 = new BindingSource();
bindingSource1.DataSource = typeof (m_List);
bindingSource1.Add(<DeinValue eben>);

<DeinValue eben> = schätze ich mal wird nen string sein, wenn nicht halt das entsprechende object.

Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(

E
265 Beiträge seit 2004
vor 16 Jahren

Im Interface definierst du ein Property Beschreibung. Zu binden versucht du aber Description. Könnte es daran liegen?

S
Syn Themenstarter:in
26 Beiträge seit 2006
vor 16 Jahren

Ich habe den Code ein wenig verändert da im Original zu viele Sachen stehen die unwichtig sind. In dem Interface heißt die Property "Description" und ich binde auch an "Description". Das ist beim umschreiben leider verloren gegangen, sry.

Was mich wundert ist das ich Breakpoints bei den get; bzw set`s habe und dort nichts passiert, weder im Interface noch in der Klasse an sich. Und das ist bei der Vorgehensweise mit .Add() und der direkten Übergabe im Konstruktor das gleiche.

Hat den jemand Erfahrung mit BindingSource und Interfaces, vllt einen Link zu dem Thema ich habe leider nichts finden können? Oder eine alternative Lösung um Inhalt von einem Assemblies in ein anderes zu "transportieren" ohne eine direkte Bindung zwischen 2 Klassen zu erzeugen?

E
265 Beiträge seit 2004
vor 16 Jahren

Jetzt seh ich es (um 00:49).
Die Liste muss ein Objekt zurück geben das ein Property Description hat. In deinem Beispiel hat die Liste ein Property Description.

Das erstellen des BindingSource und setzen eines DataBinding funktioniert dann wie im ersten post.

S
Syn Themenstarter:in
26 Beiträge seit 2006
vor 16 Jahren

Ich habe die Lösung gefunden,

Wenn man eine BindingSource mithilfe des Designers anlegt ist der Code zur initialisierung natürlich in InitialiseConponents() zu finden.

Damit das binding funktioniert muss man im Construktor der Form nach InitialiseComponents() nur noch schreiben:


...
Form1()
{
...
InitialiseComponents();
bindingSource1.Add(m_List);
}

Das Problem war also nicht das die Liste internal ist.