Domanda

Ho bisogno di un ciclo tra le proprietà di un tipo di oggetto personalizzato che sto ricevendo indietro dal database e mostrare solo le colonne che contengono i dati. Ciò significa che non posso semplicemente legare l'elenco degli oggetti al DataGrid. Non voglio ciclicamente ogni oggetto e vedere se la colonna è vuota / nullo e determinare nell'interfaccia utente per visualizzarlo. Quello che sto pensando è nel mio livello di business prima di inviare nuovamente l'oggetto Vorrei inviare un IEnumerable indietro con solo le colonne che dovrebbero essere visibili. Così stavo pensando di usare LINQ to Object per fare questo, ma non sono sicuro che sarebbe molto bello.

Qualcuno sa di una soluzione che ho potuto usare senza una tonnellata di IF che avrei potuto fare per controllare attraverso un oggetto di grandi dimensioni (30 o giù di lì le colonne) per determinare ciò che dovrebbe essere mostrato o meno.

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

Vorrei evitare tutto questo nell'interfaccia utente e tutte le FI ... Sto avendo un peto cervello su questo qualcuno mi può aiutare?

Grazie

È stato utile?

Soluzione

Date un'occhiata a le librerie .NET Reflection . È possibile utilizzare la reflection per ottenere ahold di tutte le proprietà di un oggetto, e un ciclo tra loro per scoprire se sono null o non. Poi si potrebbe restituire un insieme di oggetti KeyValuePair dove name = Chiave di proprietà, e Valore = true / false. Farebbe quindi utilizzare le keyvaluepairs per impostare la visibilità della colonna ...

Altri suggerimenti

Si potrebbe fare quanto segue per semplificare un po '

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");
  ...
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top