Je dois lier une liste Code Snippets: P>
DataGridView code>. Et entrez dans la table des résultats avec deux colonnes ID et nom Nom.
private List<MyClass> myList = new List<MyClass>(){...};
public void BindClass()
{
dataGridView.DataSource = myList;
}
public MyClass
{
public MyDataClass Data{ get; set; }
}
public MyDataClass
{
public string ID { get; set; }
public string Name { get; set; }
}
4 Réponses :
Non, vous ne pouvez pas le faire hors de la boîte. Vous devrez écrire une source de liaison personnalisée (la plus probable avec une logique spécialisée pour votre objectif spécifique) afin de permettre le «forage» plus profond que de 1 niveau de propriétés. P>
Pour ce faire sans changer le modèle est exceptionnellement fort> délicat (mais possible), nécessitant Il suffit d'ajouter Pass-Thru Propriétés: P> iCustomTypeScriptor code> ou
TypedescriptionProvider code> et un
personnalisé PropriétéDescriptor code>. Pour être honnête: ne vaut pas la peine.
public MyClass
{
public MyDataClass Data{get; set;}
[DisplayName("ID")]
public string DataID {
get {return Data.ID;}
set {Data.ID = value;}
}
[DisplayName("Name")]
public string DataName {
get {return Data.Name;}
set {Data.Name = value;}
}
}
Oui, cette solution a lieu :)
Hmmm, je n'ai jamais pensé à le faire directement via The Typedescriptor, il aurait peut-être été un peu plus facile que la route de liaison que j'ai prise :)
@Leppie - c'est toujours assez avancé, bien que
Surtout traiter des données récursives et un résultateur de 1000 des propriétés. Je devais limiter mes nids à 6 niveaux et à 600 pour empêcher le concepteur de DataGridView exploser. Apparemment, cela n'aime pas avoir plus de 650 colonnes (suffisamment drôle, c'est la facturation qui cause cette limitation, 100 * 660> 0xFFFF).
Que diriez-vous de la liaison à un type anonyme:
public void BindClass() { dataGridView1.DataSource = myList.Select(myClass => new {myClass.Data.ID, myClass.Data.Name}).ToList(); }
Wow, solution très élégante! Merci!
oui mal à mettre à jour. Que devrions nous faire ? (Pour plus de référence à d'autres utilisateurs.)
C'est facile avec Linq comme vous pouvez le voir dans Cette réponse
Voici une simple mise en œuvre de quelque chose dont j'ai besoin pour joindre à DataGridView.
P>
DataGridView1.DataSource = _ (From i In ItemList Select i.ListID, i.FullName, i.PurchaseDesc, i.EditSequence).ToList
Vous venez de poser la question exacte. Supprimer celui-ci. Et éditer le précédent si nécessaire. EDIT: Je vois que vous avez supprimé le précédent. Ce n'est pas la bonne manière que tout le monde qui a tenté de vous aider, les réponses sont maintenant parties.
Désolé .. La question précédente n'était pas correcte ..
Oui, j'ai eu un bowvote sans raison et vous avez supprimé la question.