Frage

Ich muss durch die Eigenschaften eines benutzerdefinierten Objekttyp-Schleife, die ich wieder aus der Datenbank erhalten und nur die Spalten zeigen die Daten enthalten. Das bedeutet, ich kann nicht einfach die Liste der Objekte an das Datagrid binden. Ich möchte nicht über jedes Objekt in einer Schleife und sehen, ob die Spalte leer / null ist und bestimmen in der Benutzeroberfläche, um sie anzuzeigen. Was ich denke, ist in meiner Business-Schicht, bevor ich das Objekt zurückschicken würde ich eine IEnumerable zurück nur mit den Spalten senden, die sichtbar sein sollen. So wurde ich die Verwendung von Linq zu denken Objekt, dies zu tun, aber ich bin nicht sicher, dass sehr schön sein würde.

Kennt jemand eine Lösung, die ich ohne eine Tonne IF-Anweisungen verwenden könnte, die ich tun könnte, durch ein großes Objekt zu überprüfen (30 oder so Spalten), um zu bestimmen, was gezeigt werden soll oder nicht.

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

Ich wünsche all dies in der Benutzeroberfläche und alle IFs zu vermeiden ... Ich bin auf diesem ein Gehirn Furz hat, kann mir jemand helfen?

Danke

War es hilfreich?

Lösung

Hier finden Sie aktuelle .NET Reflection Bibliotheken . Sie können Reflexion zu bekommen Ahold alle Eigenschaften eines Objekts, und Schleife durch sie verwenden, um herauszufinden, ob sie null sind oder nicht. Dann könnten Sie eine Sammlung von KeyValuePair Objekte zurück, wo Key = Eigenschaftsname und Wert = true / false. Sie würden dann die keyvaluepairs verwenden Spalte Sichtbarkeit zu setzen ...

Andere Tipps

Sie können die folgende tun, um es zu vereinfachen etwas

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");
  ...
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top