2009-09-17 3 views
0
public class ANote{ 
    public string NoteId = ""; 
    public string Note = ""; 
    public string NoteCollector = ""; 
    public DateTime NoteCollectionDate = DateTime.MinValue; 
    public string NoteCollectionDay { 
    get { return NoteCollectionDate.toString("MM/dd/yyyy") ; } 
    } 
    public string NoteCollectionTime { 
    get { return return NoteCollectionDate.toString("hh/mm tt"); } 
    } 
    public DateTime ADate = DateTime.Now; 
    public double AAmount = 0.0D; 
    public string AName = ""; 
    } 

Et BindingList aList;certains de mes classes <T> « s membres ne se présentent pas sur datagridview lié à BindingList <T>

ont aussi une grille avec un tas de DataGridTExtBoxColumns que je tente de se lier au-dessus (déjà peuplée) Liste comme:

colDate.DataPropertyName ="NoteCollectionDay"; 
colTime.DataPropertyName = "NoteCollectionTime"; 
colName.DataPropertyName = "NoteCollector"; 
colADate.DataPropertyName = "ADate"; 
colAAmount.DataPropertyName = "AAmount"; 
colAName.DataPropertyName = "AName"; 
colNotes.DataPropertyName = "Note"; 

grdNotes.AutoGenerateColumns = false; 
grdNotes.DataSource = aList; 

Mais lors de l'exécution, que mon colDate et colonnes ColTime correctement peuplent. Tous les autres sont vierges. Quand je regarde spécifiquement le Grid.Rows[idx].Cells[idx].Value pour les autres colmns tout est nul.

De plus, si je mets AutoGenerateColumns à true, je vois une colonne supplémentaire NoteID et qui est également remplie correctement, mais les champs ANote, Amount, ADate, AName et Note sont toujours vides!

Il n'y a rien de mal avec les données dans la liste .. tous les membres de la classe ont des valeurs valides.

À moins que je ne manque quelque chose Il semble que ce soit un problème avec BindingList ou DataGridView. Si ce n'est pas le cas, des idées sur la façon de déboguer ceci ... c'est un testcase assez simple!

+0

Est-ce C#? Je dois ajouter plus de caractères ici pour passer le filtre. – recursive

Répondre

4

Vous faites référence à une donnée Propriété Nom, donc seules les propriétés fonctionneront?

Les autres sont des champs. Essayez de les convertir en propriétés auto:

public string Note { get; set; } 

s'il vous plaît noter également qu'un BindingList seulement informer les abonnés que le contenu de la liste elle-même a changé, pas la propriété d'un objet contenu dans la liste.

Si vous souhaitez réaliser cela, vous voulez que votre objet implémente INotifyPropertyChanged et déclenche une notification dans la méthode set d'une propriété.

+0

Je pensais que les champs avaient des propriétés implémentées automatiquement? !! .. Comme dans chaîne publique Var; est équivalent à chaîne publique Var {get; set;} ..j'ai peut-être tort, mais quelle est la différence entre ces deux cas fonctionnellement? (Sauf si le bindingList est un exemple de ce qui ne fonctionne pas pour les champs et que je viens de faire un imbécile :) :) –

+0

C'est l'inverse. Les propriétés automatiques ont des méthodes getter et setter créées par compilateur qui utilisent des champs privés. –

+0

Et le DataGridTextBoxColumns DataPropertyName utilise la réflexion pour obtenir la valeur de la propriété que vous avez fournie. Comme le nom le suggère. –

Questions connexes