EDIT: J'ai changé libellé, ajoutée à long exemple de code pour être plus descriptifComment lire type d'objet hébergé par BindingSource
Je dois lire le nom du type de liaison objet via BindingSource.
Ma méthode accepte BindingSource comme paramètre et ignore le type d'objet 'hébergé' par BindingSource. Mais je dois lire ce type d'objet
Pour mieux expliquer ce que je voulais dire, suppose que j'ai 2 classes
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; }
}
Que je les utiliser dans le scénario de liaison Windows Forms:
// 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());
Donc, comme vous l'avez remarqué, il s'agit de la liaison maître-détail (bs1 est lié à une grille, bs2 à la seconde) *
Donc, je voudrais lire en quelque sorte le type «hébergé» via bindingSou rce BS2 (Type attendu est Liste < Parent>)
Méthode que je dois écrire Shall regarde comme suit:
Type GetBSType (BindingSource bs)
apprécierais toute aide ...
Pourriez-vous clarifier vos intentions? Le code semble essayer de réaliser quelque chose qui n'est pas décrit, et nous pourrions être en mesure d'offrir une approche alternative à l'exemple que vous avez donné. – STW
@Yoooder - d'accord ... l'exemple est la marguerite chaînage des sources de liaison. De la description, je m'attendrais: 'bs2.DataSource = nouvelle Liste();' –
el2iot2