EDIT gehostet zu lesen: Ich Wortlaut geändert, hinzugefügt Code lange Probe mehr beschreibend seinWie Objekttyp von Binding
Ich brauche Typnamen des Objekts binden über Binding zu lesen.
Meine Methode akzeptiert BindingSource als Parameter und es weiß nicht über Objekttyp "gehostet" von BindingSource. Aber ich brauche diesen Objekttyp lesen
besser zu erklären, was ich meinte, nehme ich habe 2 Klassen
class Person {
public string Name { get; set; }
public List<Parent> Parents { get; set; }
}
class Parent {
public string Name { get; set; }
public int ChildrenCount { get; set; }
}
, als ich sie in Windows Forms bin mit Bindungsszenario:
// Create Person List
List<Person> Persons = new List<Person>();
// add Sample data
Persons.Add(new Person() { Name = "Person_1" });
Persons.Add(new Person() { Name = "Person_2" });
Persons[0].Parents = new List<Parent>();
Persons[0].Parents.Add(new Parent() { Name = "Father_1", ChildrenCount = 2 });
Persons[0].Parents.Add(new Parent() { Name = "Mother_1", ChildrenCount = 2 });
Persons[1].Parents = new List<Parent>();
Persons[1].Parents.Add(new Parent() { Name = "Father_2", ChildrenCount = 1 });
Persons[1].Parents.Add(new Parent() { Name = "Mother_2", ChildrenCount = 1 });
// create binding sources
BindingSource bs1 = new BindingSource(Persons, null);
BindingSource bs2 = new BindingSource(bs1, "Parents");
// bind to grid
dataGridView1.DataSource = bs1;
dataGridView2.DataSource = bs2;
// ****************************************
// ****** Read type 'hosted' by BS ********
// ****************************************
// BS1 - Expected: System.Collections.Generic.List`1[Person]
// That's easy...
Console.WriteLine("type bind to BS1=" + bs1.DataSource.GetType());
// BS2 - Expected: System.Collections.Generic.List`1[Person]
// HOW TO READ THAT ??!!
// this returns BindingSource type
Console.WriteLine("type bind to BS2=" + bs2.DataSource.GetType());
// this returns: System.Collections.Generic.List`1[Person] (I need List<Parents> or Person.List<Parents>"
Console.WriteLine("type bind to BS2=" + (bs2.DataSource as BindingSource).DataSource.GetType());
Also, wie Sie bemerkt haben, ist dies Master-Detail-Bindung (bs1 ist an ein Gitter binden, bs2 an zweites) *
Also würde ich gerne lesen irgendwie Typ "gehostet" über BindingSou rce BS2 (Erwarteter Typ ist Liste < Parent>)
Methode muss ich werde sieht wie folgt schreiben:
Type GetBSType (BindingSource bs)
Jede mögliche Hilfe schätzen ...
Könnten Sie besser Ihre Absichten klären? Der Code scheint zu versuchen, etwas zu erreichen, das nicht beschrieben wird, und wir könnten einen alternativen Ansatz zu dem von Ihnen gegebenen Beispiel anbieten. – STW
@Yoooder - vereinbart ... das Beispiel ist eine Daisy-Chain-Bindequelle. Von der Beschreibung würde ich erwarten: 'bs2.DataSource = neue Liste();' –
el2iot2