2017-04-06 1 views
0

Bonne journée. Je ne sais pas comment dire cela, mais s'il vous plaît restez avec moi. J'ai plusieurs instances de plusieurs classes avec diverses propriétés de différents types. Mes utilisateurs (très petite entreprise pour laquelle je travaille) aimeraient effectuer des calculs personnalisés sur ces variables et afficher les résultats dans une nouvelle colonne DGV. Par exemplePermet à l'utilisateur final de créer des propriétés personnalisées pour une classe. Rendre ces propriétés visibles à DGV

DGV1 utilise la liste (de Myclass) comme source de données. Les colonnes sont automatiquement ajoutées au lieu de prédéfinies.

Un utilisateur pense à une propriété qu'il aimerait toujours voir sur dgv1. Il décide que cette nouvelle propriété devrait être le résultat de (Myclass.property1 - Myclass.property2)

Iv'e jamais fait ce genre de chose et ne pas avoir la moindre idée où commencer. Je sais que je ne peux pas coder en dur toutes les combinaisons possibles de propriétés. En outre, il existe un moyen pour les utilisateurs de prévoir toutes les combinaisons dont ils auront besoin.

Il doit fondamentalement être aussi flexible qu'excel. J'ai un générateur de filtre personnalisé de style logictree pour queering contre les propriétés de ces objets. Certains utilisateurs veulent également pouvoir utiliser ces propriétés personnalisées en tant que nœuds dans le filtre.

Je ne suis même pas sûr s'il existe un moyen d'ajouter une propriété à une classe au moment de l'exécution et de telle sorte qu'elle se comporte comme des propriétés qui sont codées en dur.

Je vous serais reconnaissant de votre réflexion et de vos conseils à ce sujet. Aussi, si je ne suis pas clair sur quoi que ce soit alors je m'excuse. S'il vous plaît laissez-moi savoir si je dois clarifier quelque chose. Merci d'avance.

* Édition # J'ai découvert Typebuiler et je suis en train de lire.

Répondre

0

Il n'existe aucun moyen réel d'ajouter des propriétés à une classe à l'exécution. Une fois qu'une classe est créée, elle est fondamentalement gravée dans la pierre.

Vous pourriez cependant avoir un dictionnaire (Of String, Object) pour contenir le nom et la valeur de "properties" dans votre classe. Faites toutes les propriétés comme ceci et vous pouvez simuler des propriétés supplémentaires et amovibles. Ceci cependant est limité à l'objet.

Si vous souhaitez également que vos clients puissent effectuer des calculs, vous devrez écrire un moteur de script ou en utiliser un.

Je suggère d'utiliser un moteur JavaScript. Avec JavaScript, vous pouvez ajouter des propriétés quand vous le voulez et vous avez JavaScript comme langage de script complet (JS n'est pas seulement limité au web). Je peux suggérer NiL.JS (https://github.com/nilproject/NiL.JS) comme moteur. C'est rapide et vous pouvez facilement convertir des objets de JS à .Net.

Voici comment l'utiliser:

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 

Il est un peu plus difficile de récupérer les propriétés ajoutées à JS, mais il est possible. Je suggère de regarder les exemples sur la page GitHub.

Je ne connais pas les licences de Nil.JS, mais il existe des moteurs similaires là-bas.