2

ユーザーがデータグリッドビューで独自の式を記述できるようにする必要があります。エクセルの関数のようなもの。

数式定義の例:

バツ

したがって、ユーザーは独自の数式を数式セルに記述し、他の表にそれぞれの結果を表示します。どうすればこれを行うことができますか?

4

5 に答える 5

2

NCalcを試してみます

NCalc は、.NET の数式エバリュエーターです。NCalc は、任意の式を解析し、静的または動的パラメーターとカスタム関数を含む結果を評価できます。

Dictionary<string, int> dict = new Dictionary<string, int>() { { "Income", 1000 }, { "Tax", 5 } };

string expressionString = "Income * Tax";
NCalc.Expression expr = new NCalc.Expression(expressionString);
expr.EvaluateParameter += (name, args) =>
    {
        args.Result = dict[name];
    };

int result = (int)expr.Evaluate();
于 2012-04-08T13:17:31.713 に答える
0

数式をC#に操作し、SystemCodeCom.Compilerを使用して動的にコンパイルし、変数値をその場でフィードして実行することができます。
そうしないと、ある種のミニパーサー/コンパイラーを暗示する必要があります。これはかなり特殊なスキルであり、すぐに複雑になる可能性があります。特に、数式がより複雑になる場合(おそらくそうです)。ここここ
に動的コンパイルに関するcodeprojectの記事があります。しかし、ウェブ上には他にもたくさんの例があります。

于 2012-04-08T12:51:12.340 に答える
0

最近、私が取り組んでいるプロジェクトで同様の要件 (式の動的解析) があり、WF (Windows Workflow Foundation) の VB 式を使用することになりました。それは確かに、この機能があなたにとってどれほど重要であるか、そしてあなたがそれにどれだけの努力を払っても構わないと思っているかによって異なります. 私の場合、いくつかの理由で NCalc よりも優れていることがわかりました。

  • NCalc よりも複雑な式をサポートします
  • 結果の式ツリーを分析して、個々の式の依存関係を判断できます
  • WF と同じ式の言語です (プロジェクトの他の場所で既に使用しています)。

とにかく、これは私がこのテーマについて書いた短いブログ投稿です。

于 2012-04-08T15:43:03.220 に答える
0

それを行う方法はいくつかありますが、それらはすべて式を実行可能なコードに変換することを中心に展開しています。独自のパーサーを作成しますか、それとも既存のパーサーを使用しますか? C# 自体、IronPython、IronRuby、既製のコンポーネントの一部。完全なパーサーを使用している場合は、ユーザーがそれを使用してできることを、不注意またはその他の方法で制限する方法を検討する必要があるかもしれません...

それらが見た目と同じくらい単純である場合、ある種の式ビルダー (2 つの名前付きの値と演算子を選択する) が有効な方法かもしれませんが、式の作成と評価の両方をモジュール化して、後で強化できるようにします。 .

ただし、それらがいかに単純に見えるかを考えると、式を事前に定義して (ある種のバッキング ストアからメタ データとしてロードし、ユーザーが入力するのではなく、これらのいずれかを選択するようにします。これには簡単に数か月を費やすことができます)。デザインの側面、それは価値がありますか?

于 2012-04-08T13:14:48.857 に答える