2017-04-06 1 views
0

Guten Tag. Ich bin mir nicht sicher, wie ich das formulieren soll, aber bleib bitte bei mir. Ich habe mehrere Instanzen von mehreren Klassen mit verschiedenen Eigenschaften verschiedener Typen. Meine Benutzer (sehr kleines Unternehmen, für das ich arbeite) möchten benutzerdefinierte Berechnungen für diese Variablen durchführen und die Ergebnisse in einer neuen DGV-Spalte anzeigen. Zum BeispielEndbenutzer darf benutzerdefinierte Eigenschaften für eine Klasse erstellen. Machen Sie diese Eigenschaften sichtbar für DGV

DGV1 verwendet Liste (von Myclass) als Datenquelle. Die Spalten werden automatisch anstelle von vordefiniert hinzugefügt.

Ein Benutzer denkt sich eine Eigenschaft aus, die er immer auf dgv1 sehen möchte. Er entscheidet, dass diese neue Eigenschaft sollte das Ergebnis (Myclass.property1 - Myclass.property2) sein

Iv'e nie so etwas getan und haben keine Ahnung, wo ich anfangen soll. Ich weiß, dass ich unmöglich jede mögliche Kombination von Eigenschaften fest codieren kann. Außerdem gibt es einen Weg, auf dem die Benutzer jede Kombination vorhersehen können, die sie benötigen.

Es muss im Grunde so flexibel wie Excel sein. Ich habe einen Logfile-Stil benutzerdefinierte Filter Builder für Queering gegen Eigenschaften dieser Objekte. Einige Benutzer möchten diese benutzerdefinierten Eigenschaften auch als Knoten im Filter verwenden können.

Ich bin nicht einmal sicher, ob es eine Möglichkeit gibt, einer Klasse zur Laufzeit eine Eigenschaft hinzuzufügen, und zwar so, dass sie sich wie hart codierte Eigenschaften verhält.

Ich wäre dankbar für Ihre Überlegungen und Ratschläge in dieser Angelegenheit. Außerdem, wenn ich in irgendetwas unklar bin, dann entschuldige ich mich. Bitte lassen Sie mich wissen, wenn ich etwas klären muss. Vielen Dank im Voraus.

* Bearbeiten # Ich habe Typebuiler entdeckt und lese es auf.

Antwort

0

Es gibt keine echte Möglichkeit, einer Klasse Eigenschaften zur Laufzeit hinzuzufügen. Sobald eine Klasse erstellt ist, ist sie im Grunde genommen in Stein gemeißelt.

Sie könnten jedoch ein Dictionary (Of String, Object) haben, um den Namen und Wert von "Eigenschaften" in Ihrer Klasse zu halten. Machen Sie alle Eigenschaften wie folgt und Sie können addierbare und entfernbare Eigenschaften simulieren. Dies ist jedoch auf das Objekt beschränkt.

Wenn Sie möchten, dass Ihre Kunden auch Berechnungen durchführen können, müssen Sie eine Skript-Engine schreiben oder eine verwenden.

Ich schlage vor, eine JavaScript-Engine zu verwenden. Mit JavaScript können Sie Eigenschaften hinzufügen, wann immer Sie möchten, und Sie haben JavaScript als vollständige Skriptsprache (JS ist nicht nur auf das Web beschränkt). Ich kann NiL.JS (https://github.com/nilproject/NiL.JS) als Motor vorschlagen. Es ist schnell und Sie können Objekte leicht von JS nach .Net konvertieren.

Hier ist, wie es zu benutzen:

Dim o As New YourCustomObject() ' Your object (e.g. has a property x (double)) 
o.x = 5.0 
Dim c As New Context() ' Create a new JS environment 
c.DefineVariable("o").Assign(JSValue.Marshal(o)) ' Transfer the variable 
c.Eval("o.x = 6.0;") ' Change the value in JS and it will change in .Net 
MsgBox(o.x) ' 6.0 

Es ist ein wenig schwieriger Eigenschaften in JS hinzugefügt zurückzuholen, aber es ist möglich. Ich schlage vor, die Beispiele auf der GitHub-Seite zu betrachten.

Ich weiß nicht über die Lizenzierung von Nil.JS, aber es gibt ähnliche Motoren da draußen.

Verwandte Themen