Question

Je dois faire une boucle à travers les propriétés d'un type d'objet personnalisé que je reçois de retour de la base de données et afficher uniquement les colonnes qui contiennent des données. Cela signifie que je ne peux pas simplement lier la liste des objets à la grille de données. Je ne veux pas faire une boucle à travers chaque objet et voir si la colonne est vide / null et déterminer dans l'interface utilisateur pour l'afficher. Ce que je pense est dans ma couche d'affaires avant d'envoyer l'objet de retour je renvoyer un IEnumerable avec uniquement les colonnes qui doivent être visibles. Ainsi, je pensais à l'aide Linq à l'objet pour ce faire, mais je ne suis pas sûr que ce serait très joli.

Quelqu'un sait-il d'une solution que je pouvais utiliser sans une tonne de déclarations IF que je pouvais faire pour vérifier par un grand objet (quelque 30 colonnes) pour déterminer ce qui doit être affiché ou non.

Foreach (CustomerData customerdata in Customers) 
{ 
    if (!customerdata.address.Equals("")) 
       {
            dgvCustomerData.Column["Address"].visible = false;
         }
        //Continue checking other data columns...
}

Je veux éviter tout cela dans l'interface utilisateur et toutes les ... FI Je vais avoir un pet de cerveau sur celui-ci quelqu'un peut me aider?

Merci

Était-ce utile?

La solution

Jetez un oeil à les bibliothèques de réflexion .NET . Vous pouvez utiliser la réflexion pour obtenir Ahold de toutes les propriétés d'un objet, et la boucle à travers eux pour savoir si elles sont nulles ou non. Vous pouvez ensuite retourner une collection d'objets KeyValuePair où le nom de la propriété Key = et la valeur = true / false. Vous souhaitez ensuite utiliser les keyvaluepairs pour définir la visibilité de la colonne ...

Autres conseils

Vous pouvez faire ce qui suit pour simplifier un peu

Action<T,string> del = (value,name) => {
  if ( value.Equals("") ) {
    dgvCustomerData.Column[name].Visible = false;
  }
};
foreach ( var data in Customers ) {
  del(data.address,"Address");
  del(data.name, "Name");
  ...
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top