커스텀 .NET 개체를 위한 셀 데이터 타입 > 온라인 스터디

본문 바로가기

Spread.NET

온라인 스터디

3. 셀 유형 커스텀 .NET 개체를 위한 셀 데이터 타입

페이지 정보

작성자 GrapeCity 작성일 22-05-11 15:43 조회 54회 댓글 0건

본문

Spread.NET v14 버전부터 사용자 정의 개체를 위한 데이터 형식 만들기를 지원하는 새로운 셀 데이터 형식 기능이 포함되어 있습니다. 이를 통해 Excel과 같은 사용자 정의 개체에 대한 데이터 유형 추가를 지원합니다. 


이를 통해, 사용자는 Spread 인터페이스 내에서 광범위한 주제 및 영역에 대한 정보에 액세스할 수 있으며, 사용자는 간편한 카드 팝업으로 필요한 모든 정보에 액세스하고 관련 개체에서 손쉽게 주요 데이터를 추출할 수 있습니다.


데이터 유형이 셀에 추가되면 데이터 유형을 나타내는 글리프가 셀에 추가됩니다. 따라서 글리프를 클릭하면 개체의 속성을 표시하는 데이터 카드가 팝업됩니다. 기본적으로 데이터 유형은 Spread에서 비활성화되어 있습니다. 


이를 활성화하려면 CalcFeatures 열거형을 활성화해야 합니다.

// Enable CalcFeatures to All
fpSpread1.AsWorkbook().WorkbookSet.CalculationEngine.CalcFeatures = CalcFeatures.All;


풍부한 셀 값을 나타내는 IRichValue 인터페이스를 사용하여 데이터 유형을 셀에 추가할 수 있습니다. 이를 위해 IRichValue 인터페이스를 구현하는 클래스를 구현하고 인스턴스를 워크시트로 설정할 수 있습니다. 


여기에서는 기본 제공 클래스인 RichValue<T>와 함께 Employee 클래스를 사용했습니다.


Spread에서는 DataTable과 DataView가 기본 지원됩니다. 사용자는 DataTable 또는 DataView의 열에서 데이터를 추출할 수 있는 IRichValue 개체를 만들 수 있습니다.


[C#]

IRichValue richValue = BuiltInRichValue.FromDataTable(tbl, defaultColumnName, showHeaders);             

[VB]

Dim richValue As IRichValue = BuiltInRichValue.FromDataTable(tbl, defaultColumnName, showHeaders)



아래 표시된 예제 이미지에서 Employee 클래스는 IMedia 인터페이스를 구현합니다. Employee 클래스는 IMedia 인터페이스를 구현하여 셀의 인라인 리치 값 아이콘을 사용자 정의합니다. 


이 클래스에는 ID, 이름, 성, 직위, 부서, 성별, 연령 및 입사 연도와 같은 필드가 있습니다. 


워크시트에 데이터 유형을 추가하려면 IRange 인터페이스의 Value 속성을 사용하여 셀 값에 개체를 설정하고, IRange 인터페이스의 Formula 속성을 사용하여 셀에 수식을 설정할 수 있습니다. 


여기에서는 B2: B8 및 C2: C3의 셀에 값을 설정했습니다.


데이터 유형이 포함된 일반 셀이 활성화된 경우 셀의 오른쪽 상단에 삽입 버튼이 표시되고 사용자는 오른쪽에서 가장 가까운 빈 셀에 관련 속성(field)을 추가할 수 있습니다. 속성이 채워진 셀에는 관련 수식이 포함됩니다. 반면, 데이터 유형이 포함된 테이블 셀이 활성화되면 테이블의 오른쪽 상단에 삽입 버튼이 표시되고 사용자는 관련 속성(field)을 추가할 수 있습니다. 


사용자가 속성을 선택하면 오른쪽에 새 열이 추가됩니다. 새로 추가된 열은 추가된 속성의 이름을 가지며 열에 속성의 관련 값을 채웁니다. 관련 공식이 포함되어 있습니다.


수식을 사용하여 맞춤 .NET 데이터 개체의 속성에 액세스하려면 다음 구문을 사용해야 합니다.

B2.Property1

또는

B2.[The Property 1]


ef108081370f804568054b57e0ef3df7_1652249407_1192.gif




샘플 코드


아래 코드는 위의 이미지와 같은  데이터 유형 추가를 설명하는 사용 사례를 구현합니다.



[C# 코드]

private void Form1_Load(object sender, EventArgs e)
        {
            // Enable CalcFeatures to All
            fpSpread1.AsWorkbook().WorkbookSet.CalculationEngine.CalcFeatures = CalcFeatures.All;
            fpSpread1.ActiveSheet.Columns[1, 10].Width = 120;
            GrapeCity.CalcEngine.RichValue<Employee> andreySmith = new GrapeCity.CalcEngine.RichValue<Employee>(new Employee()
            {
                ID = 61371,
                FirstName = "Andrey",
                LastName = "Smith",
                Designation = "Tech Lead",
                Department = "IT",
                Gender = "M",
                Age = 34,
                YearOfJoining = 2013
            });
            GrapeCity.CalcEngine.RichValue<Employee> jackShang = new GrapeCity.CalcEngine.RichValue<Employee>(new Employee()
            {
                ID = 37123,
                FirstName = "Jack",
                LastName = "Shang",
                Designation = "Manager",
                Department = "Sales",
                Gender = "M",
                Age = 34,
                YearOfJoining = 2017
            });
            GrapeCity.CalcEngine.RichValue<Employee> joanaJordan = new GrapeCity.CalcEngine.RichValue<Employee>(new Employee()
            {
                ID = 37564,
                FirstName = "Joana",
                LastName = "Jordan",
                Designation = "GraphicsDesigner",
                Department = "IT",
                Gender = "F",
                Age = 28,
                YearOfJoining = 2016
            });
            GrapeCity.CalcEngine.RichValue<Employee> williamSmith = new GrapeCity.CalcEngine.RichValue<Employee>(new Employee()
            {
                ID = 28034,
                FirstName = "William",
                LastName = "Smith",
                Designation = "AVP",
                Department = "HR",
                Gender = "M",
                Age = 42,
                YearOfJoining = 2012
            });
            GrapeCity.CalcEngine.RichValue<Employee> selinaWing = new GrapeCity.CalcEngine.RichValue<Employee>(new Employee()
            {
                ID = 65134,
                FirstName = "Selina",
                LastName = "Wing",
                Designation = "Technical Engineer",
                Department = "IT",
                Gender = "F",
                Age = 34,
                YearOfJoining = 2019
            });
            GrapeCity.CalcEngine.RichValue<Employee> melinaJackson = new GrapeCity.CalcEngine.RichValue<Employee>(new Employee()
            {
                ID = 45978,
                FirstName = "Melina",
                LastName = "Jackson",
                Designation = "Senior S/W Engineer",
                Department = "IT",
                Gender = "F",
                Age = 34,
                YearOfJoining = 2014
            });
            GrapeCity.CalcEngine.RichValue<Employee> puffDuplacy = new GrapeCity.CalcEngine.RichValue<Employee>(new Employee()
            {
                ID = 32700,
                FirstName = "Puff",
                LastName = "Duplacy",
                Designation = "Team Lead",
                Department = "IT",
                Gender = "M",
                Age = 36,
                YearOfJoining = 2012
            });

            // set object in cells value
            fpSpread1.AsWorkbook().ActiveSheet.Cells["B2"].Value = andreySmith;
            fpSpread1.AsWorkbook().ActiveSheet.Cells["B3"].Value = jackShang;
            fpSpread1.AsWorkbook().ActiveSheet.Cells["B4"].Value = joanaJordan;
            fpSpread1.AsWorkbook().ActiveSheet.Cells["B5"].Value = williamSmith;
            fpSpread1.AsWorkbook().ActiveSheet.Cells["B6"].Value = selinaWing;
            fpSpread1.AsWorkbook().ActiveSheet.Cells["B7"].Value = melinaJackson;
            fpSpread1.AsWorkbook().ActiveSheet.Cells["B8"].Value = puffDuplacy;
            // set formulas in cells
            fpSpread1.AsWorkbook().ActiveSheet.Cells["C2"].Formula = "B2.[Designation]";
            fpSpread1.AsWorkbook().ActiveSheet.Cells["C3"].Formula = "B3.Designation";

        }
    }
    [System.Reflection.DefaultMember("FirstName")]
    public class Employee : IMedia
    {
        public int ID { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Designation { get; set; }
        public string Department { get; set; }
        public string Gender { get; set; }
        public int Age { get; set; }
        public int YearOfJoining { get; set; }
        string IMedia.ContentType => "image/png";
        Stream IMedia.Data
        {
            get
            {
                return typeof(FpSpread).Assembly.GetManifestResourceStream("FarPoint.Win.Spread.SpreadResources.EditShape.png");
            }
        }
}

                


[VB.NET 코드]

Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs)
    fpSpread1.AsWorkbook().WorkbookSet.CalculationEngine.CalcFeatures = CalcFeatures.All
    fpSpread1.ActiveSheet.Columns(1, 10).Width = 120
    Dim andreySmith As GrapeCity.CalcEngine.RichValue(Of Employee) = New GrapeCity.CalcEngine.RichValue(Of Employee)(New Employee() With {
        .ID = 61371,
        .FirstName = "Andrey",
        .LastName = "Smith",
        .Designation = "Tech Lead",
        .Department = "IT",
        .Gender = "M",
        .Age = 34,
        .YearOfJoining = 2013
    })
    Dim jackShang As GrapeCity.CalcEngine.RichValue(Of Employee) = New GrapeCity.CalcEngine.RichValue(Of Employee)(New Employee() With {
        .ID = 37123,
        .FirstName = "Jack",
        .LastName = "Shang",
        .Designation = "Manager",
        .Department = "Sales",
        .Gender = "M",
        .Age = 34,
        .YearOfJoining = 2017
    })
    Dim joanaJordan As GrapeCity.CalcEngine.RichValue(Of Employee) = New GrapeCity.CalcEngine.RichValue(Of Employee)(New Employee() With {
        .ID = 37564,
        .FirstName = "Joana",
        .LastName = "Jordan",
        .Designation = "GraphicsDesigner",
        .Department = "IT",
        .Gender = "F",
        .Age = 28,
        .YearOfJoining = 2016
    })
    Dim williamSmith As GrapeCity.CalcEngine.RichValue(Of Employee) = New GrapeCity.CalcEngine.RichValue(Of Employee)(New Employee() With {
        .ID = 28034,
        .FirstName = "William",
        .LastName = "Smith",
        .Designation = "AVP",
        .Department = "HR",
        .Gender = "M",
        .Age = 42,
        .YearOfJoining = 2012
    })
    Dim selinaWing As GrapeCity.CalcEngine.RichValue(Of Employee) = New GrapeCity.CalcEngine.RichValue(Of Employee)(New Employee() With {
        .ID = 65134,
        .FirstName = "Selina",
        .LastName = "Wing",
        .Designation = "Technical Engineer",
        .Department = "IT",
        .Gender = "F",
        .Age = 34,
        .YearOfJoining = 2019
    })
    Dim melinaJackson As GrapeCity.CalcEngine.RichValue(Of Employee) = New GrapeCity.CalcEngine.RichValue(Of Employee)(New Employee() With {
        .ID = 45978,
        .FirstName = "Melina",
        .LastName = "Jackson",
        .Designation = "Senior S/W Engineer",
        .Department = "IT",
        .Gender = "F",
        .Age = 34,
        .YearOfJoining = 2014
    })
    Dim puffDuplacy As GrapeCity.CalcEngine.RichValue(Of Employee) = New GrapeCity.CalcEngine.RichValue(Of Employee)(New Employee() With {
        .ID = 32700,
        .FirstName = "Puff",
        .LastName = "Duplacy",
        .Designation = "Team Lead",
        .Department = "IT",
        .Gender = "M",
        .Age = 36,
        .YearOfJoining = 2012
    })
    fpSpread1.AsWorkbook().ActiveSheet.Cells("B2").Value = andreySmith
    fpSpread1.AsWorkbook().ActiveSheet.Cells("B3").Value = jackShang
    fpSpread1.AsWorkbook().ActiveSheet.Cells("B4").Value = joanaJordan
    fpSpread1.AsWorkbook().ActiveSheet.Cells("B5").Value = williamSmith
    fpSpread1.AsWorkbook().ActiveSheet.Cells("B6").Value = selinaWing
    fpSpread1.AsWorkbook().ActiveSheet.Cells("B7").Value = melinaJackson
    fpSpread1.AsWorkbook().ActiveSheet.Cells("B8").Value = puffDuplacy
    fpSpread1.AsWorkbook().ActiveSheet.Cells("C2").Formula = "B2.[Designation]"
    fpSpread1.AsWorkbook().ActiveSheet.Cells("C3").Formula = "B3.Designation"
End Sub

                




DataCard 팝업 사용자 정의


사용자는 FpSpread.ResolveCustomControl 이벤트를 사용하여 데이터 카드 팝업을 사용자 정의할 수 있습니다. 


여기에서 데이터 카드는 "Designation(직함)" 핃드의 텍스트를 표시하도록 사용자 정의되었으며, 데이터 카드를 클릭하면 해당 직원의 Designation(직함) 필드 값이 빈 셀에 채워집니다.


ef108081370f804568054b57e0ef3df7_1652249976_4563.gif
 


샘플 코드



아래 코드는 위의 이미지와 같은 데이터 카드 팝업을 사용자 정의하는 사용 사례를 구현합니다.


[C# 코드] 

private void FpSpread1_ResolveCustomControl(object sender, ResolveCustomControlEventArgs e)
        {
            if (e.Type == CustomControlType.RichValueInsert)
            {
                Button button = new Button();
                button.Click += (object sender1, EventArgs buttonEventArgs) =>
                {
                    e.Command.Execute("Designation", e.Spread);
                };
                button.Text = "Designation";
                e.Control = button;
            }
            else
            {
                e.Control = e.CreateDefaultControl();
            }
        }

                


[VB 코드] 

Private Sub FpSpread1_ResolveCustomControl(ByVal sender As Object, ByVal e As ResolveCustomControlEventArgs)
    If e.Type = CustomControlType.RichValueInsert Then
        Dim button As Button = New Button()
        button.Click += Function(ByVal sender1 As Object, ByVal buttonEventArgs As EventArgs)
                            e.Command.Execute("Designation", e.Spread)
                        End Function
        button.Text = "Designation"
        e.Control = button
    Else
        e.Control = e.CreateDefaultControl()
    End If
End Sub

                





지금 바로 Spread.NET을 다운로드하여 직접 테스트해보세요!

spnet.png

 
  • 페이스북으로 공유
  • 트위터로  공유
  • 구글플러스로 공유
  • 카카오톡으로 보내기

댓글목록

등록된 댓글이 없습니다.

그레이프시티 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기
그레이프시티 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기
이메일 : sales-kor@grapecity.com | 전화 : 1670-0583 | 경기도 안양시 동안구 시민대로 230, B-703(관양동, 아크로타워) 그레이프시티(주) 대표자 : 허경명 | 사업자등록번호 : 123-84-00981 | 통신판매업신고번호 : 2013-경기안양-00331 Copyright ⓒ 2022 GrapeCity inc.