2009-05-07 5 views
0

Je développe une application Windows Forms dans VS2008. Je veux afficher un inconnu, mais petit nombre de DataGridViews sur un formulaire, en utilisant le code comme ceci:Comment puis-je documenter DataGridViews dynamiquement chargé?

foreach (QueryFilter f in Query.Filter) 
{      
    DataGridView grid = CreateGridView(String.Format("GridView{0}", filters.Count)); 
    grid.Location = new System.Drawing.Point(3, 9 + (filters.Count * grid.Height + 9)); 
    BindingList<QueryFilterNode> nodes = new BindingList<QueryFilterNode>(); 
    foreach (QueryFilterNode node in f) 
     nodes.Add(node); 
    grid.DataSource = nodes; 
    panel1.Controls.Add(grid); 
    filters.Add(nodes);      
} 

La grille (s) sont ajoutés au panneau, mais les données à l'intérieur ne sont pas affichées. Je suppose que la définition de la propriété DataSource ne lie pas réellement la grille, car (par exemple) l'événement dataGridView_ColumnAdded n'est pas déclenché.

QueryFilter et QueryFilterNode ne sont que des POCO et contiennent des données bien sûr.

Pour l'amour complet de la construction du DataGridView:

private DataGridView CreateGridView(string name) 
{ 
    DataGridView grid = new DataGridView(); 
    grid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;    
    grid.Name = name; 
    grid.Size = new System.Drawing.Size(484, 120); 
    grid.ColumnAdded += new System.Windows.Forms.DataGridViewColumnEventHandler(this.dataGridView_ColumnAdded); 
    return grid; 
} 
+0

À quoi est lié le BindingList? Je crois que vous devez définir la propriété BindingList.DataSource. – NYSystemsAnalyst

Répondre

0

Hmm, il semble que c'était ma propre erreur. QueryFilterNode, utilisé comme source de données (BindingList<QueryFilterNode>) n'était pas un objet POCO mais un contrat de données. Extrait:

[DataContract(Name = "QueryFilterNode")] 
public class QueryFilterNode 
{ 
    [DataMember(IsRequired = true)] 
    public string FieldCode;   

Pour une raison quelconque, elles ne peuvent pas être databound. J'ai utilisé une simple classe comme celle-ci dans ma BindingList et ça a juste marché.

class QueryFilterNodeSimple 
{ 

    public string FieldCode 
    { get; set; } 
+1

Je pense que les données doivent être dans les propriétés, pas dans les champs. – Gman

Questions connexes