123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 |
- using FormulaEnginePoC.FormulaEngine;
- using FormulaEnginePoC.FormulaEngine.CspImpl;
- using FormulaEnginePoC.FormulaEngine.DepImpl;
- using FormulaEnginePoC.SampleClasses;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Windows.Forms;
- using FormulaEnginePoC.FormulaEngine.Mapping;
- namespace FormulaEnginePoC.UI
- {
- public partial class SampleForm : Form
- {
- private readonly TypeMapping _bookTypeMapping = new TypeMapping(typeof(Book));
- private List<Book> _dataSource;
- private CspCalcFormula<Book, object> _cspCalcFormula;
- private CspFilterFormula<Book> _cspFilterFormula;
- private DepCalcFormula<Book, object> _depCalcFormula;
- private DepFilterFormula<Book> _depFilterFormula;
- public SampleForm()
- {
- InitializeComponent();
- FieldGrid.AutoGenerateColumns = true;
- FieldGrid.DataSource = _bookTypeMapping.Properties;
- RefreshDataSource();
- foreach (var item in FormulaConverter.GetOperators())
- OperatorToolStripDropDownButton.DropDownItems.Add(new ToolStripMenuItem { Text = item });
- foreach (var item in FormulaConverter.GetFunctions())
- FunctionToolStripDropDownButton.DropDownItems.Add(new ToolStripMenuItem { Text = item });
- }
- private void RefreshDataSource()
- {
- _dataSource = new List<Book>
- {
- new Book {Name = "C#高级编程", Cat = "软件开发", IsUp = true, Price = 34.5m,PublishTime = DateTime.Now.AddYears(-1).Date}
- , new Book {Name = "摩托维修与禅", Cat = "哲学小说", IsUp = true, Price = 78.9m,PublishTime = DateTime.Now.Date}
- , new Book {Name = "VB高级编程", Cat = "软件开发", IsUp = true, Price = 23.4m,PublishTime = DateTime.Now.AddYears(1).Date}
- , new Book {Name = "C#入门经典", Cat = "软件开发", IsUp = true, Price = 12.3m,PublishTime = DateTime.Now.AddYears(-2).Date}
- , new Book {Name = "高效休息法", Cat = "养生保健", IsUp = true, Price = 56.7m,PublishTime = DateTime.Now.AddYears(-3).Date}
- };
- DataSourceGrid.AutoGenerateColumns = true;
- DataSourceGrid.DataSource = _dataSource;
- }
- private void CompileX<T>(out T field, CodeExecPanel eventSource, Func<string, T> newFormula) where T : Formula
- {
- field = null;
- eventSource.Code = "";
- try
- {
- field = newFormula(FormulaTextBox.Text);
- eventSource.Code = field.CodeExpression;
- field.Compile();
- }
- catch (Exception exception)
- {
- eventSource.Code += Environment.NewLine + Environment.NewLine + exception;
- }
- }
- private void ExecuteFilterX(CodeExecPanel eventSource, FilterFormula<Book> formula)
- {
- try
- {
- var result = _dataSource.Where(formula.CompiledFunc).ToArray();
- eventSource.Result = $"共 {result.Length} 项{Environment.NewLine}"
- + string.Join(Environment.NewLine, result.Select(p => $" - {p.Name}"));
- }
- catch (Exception exception)
- {
- eventSource.Result = exception.ToString();
- }
- }
- private void ExecuteCalcX(CodeExecPanel eventSource, CalcFormula<Book, object> formula)
- {
- try
- {
- var result = formula.CompiledFunc((Book)DataSourceGrid.SelectedRows[0].DataBoundItem);
- eventSource.Result = result?.ToString() ?? "<null>";
- }
- catch (Exception exception)
- {
- eventSource.Result = exception.ToString();
- }
- }
- private void NewToolStripButton_Click(object sender, EventArgs e)
- {
- RefreshDataSource();
- }
- private void NewFormulaToolStripButton_Click(object sender, EventArgs e)
- {
- FormulaTextBox.Clear();
- }
- private void FieldGrid_DoubleClick(object sender, EventArgs e)
- {
- if (1 != FieldGrid.SelectedRows.Count)
- {
- return;
- }
- FormulaTextBox.SelectedText = ((PropertyMapping)FieldGrid.SelectedRows[0].DataBoundItem).Display + " ";
- FormulaTextBox.Focus();
- }
- private void Insert_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e)
- {
- var selected = FormulaTextBox.SelectedText;
- if (sender == FunctionToolStripDropDownButton)
- {
- FormulaTextBox.SelectedText = e.ClickedItem.Text + $" ( {selected} ) ";
- FormulaTextBox.SelectionStart -= 3;
- }
- else
- {
- FormulaTextBox.SelectedText = e.ClickedItem.Text + " ";
- }
- FormulaTextBox.Focus();
- }
- private void DepCalcExecPanel_CompileButtonClicked(object sender, EventArgs e)
- {
- CompileX(out _depCalcFormula, (CodeExecPanel)sender, formula => new DepCalcFormula<Book, object>(formula));
- }
- private void DepCalcExecPanel_ExecuteButtonClicked(object sender, EventArgs e)
- {
- ExecuteCalcX((CodeExecPanel)sender, _depCalcFormula);
- }
- private void DepFilterExecPanel_CompileButtonClicked(object sender, EventArgs e)
- {
- CompileX(out _depFilterFormula, (CodeExecPanel)sender, formula => new DepFilterFormula<Book>(formula));
- }
- private void DepFilterExecPanel_ExecuteButtonClicked(object sender, EventArgs e)
- {
- ExecuteFilterX((CodeExecPanel)sender, _depFilterFormula);
- }
- private void CspCalcExecPanel_CompileButtonClicked(object sender, EventArgs e)
- {
- CompileX(out _cspCalcFormula, (CodeExecPanel)sender, formula => new CspCalcFormula<Book, object>(formula));
- }
- private void CspCalcExecPanel_ExecuteButtonClicked(object sender, EventArgs e)
- {
- ExecuteCalcX((CodeExecPanel)sender, _cspCalcFormula);
- }
- private void CspFilterExecPanel_CompileButtonClicked(object sender, EventArgs e)
- {
- CompileX(out _cspFilterFormula, (CodeExecPanel)sender, formula => new CspFilterFormula<Book>(formula));
- }
- private void CspFilterExecPanel_ExecuteButtonClicked(object sender, EventArgs e)
- {
- ExecuteFilterX((CodeExecPanel)sender, _cspFilterFormula);
- }
- }
- }
|