3. 셀 유형 커스텀 .NET 개체를 위한 셀 데이터 타입
페이지 정보
작성자 GrapeCity
본문
관련링크
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]
샘플 코드
아래 코드는 위의 이미지와 같은 데이터 유형 추가를 설명하는 사용 사례를 구현합니다.
[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(직함) 필드 값이 빈 셀에 채워집니다.
샘플 코드
아래 코드는 위의 이미지와 같은 데이터 카드 팝업을 사용자 정의하는 사용 사례를 구현합니다.
[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을 다운로드하여 직접 테스트해보세요!
댓글목록
등록된 댓글이 없습니다.