BindingList eines UserControls von 'außen' ändern

01/11/2008 - 12:58 von Michaela Meier | Report spam
Hi,

Ich steh mal wieder an meinem Lieblingsplatz ... auf dem Schlauch ;-)

Ich habe ein UserControl erstellt, das ein DataGridView enthàlt.
Diesem habe ich eine Property verpaßt, um die darzustellenden Daten
duchreichen zu können.

private BindingList<InfoData> _infodatalist = new
BindingList<InfoData>();
public BindingList<InfoData> InfoDataList
{
get { return _infodatalist ; }
set {_infodatalist = value; }
}


Die InfoData-Klasse habe ich entsprechend definiert

public class InfoData: INotifyPropertyChanged

Bei der Initialisierung des Controls weise ich einmalig die DataSource
zu.

dgvInfo.DataSource = _infodatalist ;


Das Problem ist nun, daß alle Änderungen an _infodatalist von
'innerhalb' des Controls wunderbar übernommen werden. Egal ob ich
Daten àndere
_infodatalist[0].Dings="àtsch"
oder hinzufüge bzw. lösche
_infodatalist.RemoveAt(0)
Die Anzeige im Grid àndert sich sofort.

Wenn ich jedoch von die Daten aus der Form heraus àndern möchte, die
das Control enthàlt,
BindingList<InfoData> NewInfoList = new BindingList<InfoData>();
ctrlInfo.InfoDataList = NewInfoList ;

dann werden diese Versuche geflissentlich ignoriert.

Erst, wenn ich set{} mit

dgvInfo.DataSource = null;
dgvInfo.DataSource = _infodatalist;

ergànze, dann klappt es.

Warum?
Hab ich was übersehen. Macht man "sowas" üblicherweise völlig anders
oder ist dieses Verhalten genau so gewünscht?

Danke
 

Lesen sie die antworten

#1 Frank Dzaebel
01/11/2008 - 16:39 | Warnen spam
Hallo Michaela,

leider ist Dein Code etwas unvollstàndig, man
weiss nicht genau, was was ist (ich weiss, das
ist immer recht aufwàndig, gute reproduzierbare
Beschreibungen zu posten). Ggf. Projekt mal mailen.

Aber so ins Blaue hinein ...

Wenn Du die DataSource einfach von aussen
ànderst, bekommt das Grid das nicht mit.
Die Schnittstelle, die das (hier) ermöglicht,
ist zum Beispiel IBindingList (SupportsChangeNotification,
ListChanged). So eine ListChanged-Notification kann
man (wenn sich denn auch viel an der Liste geàndert hat)
zum Beispiel über ein "CurrencyManager.Refresh()" erzwingen,
der intern ein ListChanged(...Reset) ausführt, sodass
das Grid das auch mitbekommt.
In diesem Posting wàre es wohl "cm.Refresh();" (ungeprüft)
http://groups.google.com/group/micr...41a64fb157


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen