2017-04-06 2 views
0

おはよう。 これをどう言いますかわかりませんが、私と一緒にいてください。 私は、さまざまな種類のさまざまなプロパティを持ついくつかのクラスのインスタンスをいくつか持っています。 私のユーザー(私が働いている非常に小さなビジネス)は、それらの変数に対してカスタム計算を実行し、その結果を新しいDGV列に表示したいと考えています。 例:エンドユーザーがクラスのカスタムプロパティを作成できるようにします。これらのプロパティをDGVに表示させる

DGV1は、(Myclassの)リストをデータソースとして使用します。列は、事前に定義されたものではなく自動的に追加されます。

1人のユーザーが、常にdgv1に表示したいプロパティを考えます。 彼はこの新しいプロパティが (Myclass.property1 - Myclass.property2)の結果であることを決定した

Iv'eは、この種のものをやっていないし、どこから始めれば見当もつかないありません。私は可能性のあるすべてのプロパティの組み合わせをハードにコード化することはできないことを知っています。また、ユーザーが必要とするすべての組み合わせを予期する方法もあります。

これは基本的にExcelほど柔軟である必要があります。 私は、これらのオブジェクトのプロパティに対するキューリングのためのlogictreeスタイルカスタムフィルタビルダーを持っています。ユーザーの中には、これらのカスタムプロパティをフィルターのノードとして使用できるようにするユーザーもいます。

実行時にクラスにプロパティを追加して、ハードコードされたプロパティとして動作するような方法があるかどうかはわかりません。

私はあなたの考えやアドバイスに感謝します。また、私が何かが不明な場合、私は謝罪します。私が何かを明確にする必要があるかどうか教えてください。 ありがとうございます。

*編集# 私はTypebuilerを発見し、それを読んでいます。

答えて

0

実行時にクラスにプロパティを追加する実際の方法はありません。クラスが作成されると、基本的には石で設定されます。

ただし、クラスの "プロパティ"の名前と値を保持するDictionary(Of String、Object)を使用できます。このようにすべてのプロパティを作成し、追加可能なプロパティとリムーバブルなプロパティを並べ替えることができます。ただし、これはオブジェクトに限定されています。

お客様が計算を実行できるようにするには、スクリプトエンジンを作成するか、スクリプトエンジンを使用する必要があります。

JavaScriptエンジンを使用することをお勧めします。 JavaScriptを使用すると、いつでも必要なときにプロパティを追加することができ、JavaScriptは完全なスクリプト言語として使用できます(JSはWebだけでなく)。 エンジンとしてNiL.JS(https://github.com/nilproject/NiL.JS)を提案できます。これは高速で、JSから.Netにオブジェクトを簡単に前後に変換することができます。ここで

はそれを使用する方法である:

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 

それはJSに追加されたプロパティを取得するには少し難しくなりますが、それは可能です。私はGitHubページで例を見ることをお勧めします。

Nil.JSのライセンスについてはわかりませんが、同様のエンジンがあります。

関連する問題