! 제품 버전을 정확하게 입력해 주세요.
제품 버전이 정확하게 기재되어 있지 않은 경우,
최신 버전을 기준으로 안내 드리므로
더욱 빠르고 명확한 안내를 위해
제품 버전을 정확하게 입력해 주세요!

표현식 편집기를 사용하여 사용자 정의 .NET 함수를 만드는 5단계 > 블로그 & Tips

본문 바로가기

ComponentOne

블로그 & Tips

표현식 편집기를 사용하여 사용자 정의 .NET 함수를 만드는 5단계

페이지 정보

작성자 GrapeCity 작성일 2019-04-05 00:00 조회 2,800회 댓글 0건

본문

ExpressionEditor를 사용할 때 사용자는 표현식을 평가해야 합니다. 예를 들어, 재무 응용 프로그램에서 SMA(Simple Moving Average)와 같은 메트릭을 만들어 주가의 일일 변화를 연구하여 추세를 확인해야 할 수 있습니다. SMA 메트릭을 사용하면 집계 된 추세를 보고 이해하는 데 도움이 됩니다. 표현식 편집기를 사용하여 다른 기간의 추세를 볼 수 있도록 식을 수정할 수도 있습니다.


전반적으로, 사용자 정의 기능을 사용하면 사용 가능한 원시 데이터를 이해하는 데 도움이 됩니다.


SMA는 한가지 예시일 뿐이며 더 많은 복잡한 기능을 추가할 수 있습니다. 이 포스팅에 첨부된 샘플은 다른 트렌드 기능 (상품 채널 인덱스)도 보여줍니다.


C1ExpressionEditor는 사용자가 표현식을 편집하고 평가할 수 있는 독립형 컨트롤입니다. 간단한 표현식과 내장 함수를 사용할 수도 있지만 Expression Editor에 사용자 정의 함수를 추가하고 동일한 편집 기능을 활용할 수도 있습니다. 사용자 정의 함수를 사용하면 여러분만의 로직을 추가하여 응용 프로그램 요구 사항에 따라 식을 평가할 수 있습니다.


이 포스팅에서는 Expression Editor에 사용자 정의 함수를 추가하고 C1FlexGrid와 함께 사용하는 방법을 살펴볼 것입니다. 금융 애플리케이션에서 일반적으로 사용되는 간단한 이동 평균 함수를 작성해보겠습니다.


다음은 응용 프로그램의 .NET 표현식 결과입니다.


ExpressionEditor에 추가 된 사용자 정의 함수
ExpressionEditor에 추가 된 사용자 정의 함수 


.NET 애플리케이션에서 그리드 생성


먼저 그리드에 일부 재무 데이터를 로드하고 바인딩되지 않은 열을 추가합니다. 이 열은 SMA 함수를 포함하는 표현식 편집기를 설정하는 데 사용됩니다.


//Add unbound column
var column = _flexGrid.Cols.Add();
column.Name = "SMA50";
column.Caption = "SMA50";
column.AllowExpressionEditing = true;
column.DataType = typeof(double);
column.Format = "C2";
column.AllowEditing = false;


ExpressionEditor 설정


다음으로, 커스텀 함수를 추가 할 C1ExpressionEditor 인스턴스가 필요합니다. ExpressionEditorCollection을 사용하여 그리드와 연결한 다음 이 컬렉션에 ExpressionEditor를 추가합니다.


//
 Associate an ExpressionEditorCollection with the grid
 _editorCollection = new
 ExpressionEditorCollection(); _editorCollection.SetExpressionEditorCollection(_flexGrid, _editorCollection);
//
 Add editor for SMA50 column in ExpressionEditorCollection
 _editor = _editorCollection.Add("SMA50");


ExpressionItem 설정


ExpressionItem는 표현식의 최소 단위이며, 상수, 필드, 연산자 또는 함수일 수 있습니다. 표현식 편집기를 설정한 후 ExpressionEditor에 대한 ExpressionItem을 설정해야 합니다. 사용자 정의 함수의 구문, 인수, 설명 및 사용자 정의 함수의 ItemType을 정의하는 데 도움이 됩니다.


함수를 작성하고 있으므로 여기에서 ItemType of Aggregate 함수를 사용합니다.


//Define ExpressionItem
var expressionItem = new ExpressionItem("SMA", "SMA()", ItemType.AggregateFuncs);
expressionItem.Arguments.Add(new Argument("period", new Type[]
{
    typeof(int)
}){
              Description = "Time Period for calculating Simple Moving Average"
});
expressionItem.Arguments.Add(new Argument("value", new Type[]
{
    typeof(byte), typeof(short), typeof(int), typeof(long), typeof(double), typeof(decimal)
}){
    Description = "Values on which Simple Moving Average is to be calculated"
});

expressionItem.IsMultiArguments = true;
expressionItem.Description = "Computes the Simple Moving Average for a specified time period in a given sequence of numbers (or enumerable).";


평가 함수 정의


ExpressionItem을 정의한 후 SMA를 계산할 평가 논리를 기록합니다. ExpressionEditor는 이 함수에 위임하여 SMA 표현식을 평가하고 반환할 결과를 표시합니다.


평가 함수에는 List <object>인수가 있어야 하며 Object를 반환해야 합니다. 함수는 두 가지 유형의 인수, 즉 정확한 값(리터럴로 표시)과 대괄호([])로 묶인 열 이름을 사용할 수 있습니다.


ExpressionItem의 ItemType이 Aggregate이고 단일 열 기반 인수만 포함하는 경우 List <object>는 해당 열의 모든 값을 포함합니다. 이 경우 ExpressionEditor는 해당 열의 모든 값에 대해 함수를 한번 평가합니다. 그러나 전달된 인수가 리터럴과 열 기반 인수의 혼합 인 경우 List <object>에는 리터럴 값과 함수를 평가할 열 셀의 값이 포함됩니다. 이 경우 ExpressionEditor는 각 행을 DataSource에 있는 순서대로 평가하기 시작합니다.


private object SMA(List<object> values)
{
            string colName = GetColumnName(_editor.Expression);
            DataRow dataRow = null;

            List<double> list = new List<double>();
            int period = Convert.ToInt32(values[0]);

            if (_editorCollection.DataSource is DataTable)
            {
                dataRow = _editor.ItemContext as DataRow;
                if (dataRow == null)
                {
                    return null;
                }

                DataTable table = _editorCollection.DataSource as DataTable;

                for (int rowIndex = table.Rows.IndexOf(dataRow); rowIndex < table.Rows.Count; ++rowIndex)
                {
                    list.Add(Convert.ToDouble(table.Rows[rowIndex][colName]));
                }
            }

            return CalculateSMA(period, list);
}
private double? CalculateSMA(int period, List<double> values)
{
            if (values == null || period > values.Count)
            {
                return null;
            }
            return values.Take(period).Average();
}


평가 로직이 정의되면 표현식 편집기의 'AddFunction' 메소드를 사용하여 이 평가 로직뿐만 아니라 이전에 정의된 ExpressionItem을 추가합니다.


// Add the ExpressionItem and the SMA Custom Function to the editor
_editor.AddFunction(expressionItem, SMA, 2, 2);


이제 'SMA50' 열에서 SMA 기능을 사용할 수 있습니다.


ExpressionEditorPanel의 사용자 정의 함수에 대한 설명

ExpressionEditorPanel의 사용자 정의 함수에 대한 설명 


.NET ExpressionEditor의 추가 기능


'순위'와 같은 간단한 함수에서부터 실제 데이터를 사용자에게 보다 관련성 있는 것으로 변환 할 수 있는 복잡한 함수에 이르기까지 모든 사용자 정의 함수를 ExpressionEditor에 추가할 수 있습니다.


데이터베이스 값을 사용자가 선호하는 단위로 변환하는 사용자 정의 함수를 작성하여 UI 문자열뿐만 아니라 데이터 값을 현지화할 수도 있습니다.


샘플 다운로드 | 개발자 문서

  • 페이스북으로 공유
  • 트위터로  공유
  • 링크 복사
  • 카카오톡으로 보내기

댓글목록

등록된 댓글이 없습니다.

메시어스 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기

태그1

메시어스 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기
이메일 : sales-kor@mescius.com | 전화 : 1670-0583 | 경기도 과천시 과천대로 7길 33, 디테크타워 B동 1107호 메시어스(주) 대표자 : 허경명 | 사업자등록번호 : 123-84-00981 | 통신판매업신고번호 : 2013-경기안양-00331 ⓒ 2024 MESCIUS inc. All rights reserved.