MESCIUS SPREAD for Windows Forms 17.0J > 開発者ガイド > セル > セルデータ > カスタムオブジェクト用データ型の作成 |
Spread.NETでは、Excelと同様にカスタムオブジェクトのデータ型を設定できます。ユーザーは、Spreadインターフェース内のさまざまな主題や領域に関する情報にアクセスできます。本機能により、ユーザーは簡単なカードポップアップで必要な情報にアクセスし、関連するオブジェクトから重要なデータを容易に抽出できます。
セルにデータ型を追加すると、そのセルにデータ型を示すグリフが追加されます。グリフをクリックすると、オブジェクトのプロパティを表示するデータカードがポップアップされます。Spreadでは、デフォルトで、データ型が無効に設定されていて、CalcFeatures列挙型を使用することで有効に設定できます。
リッチセル値を表す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インタフェースを実装し、セルのインラインリッチバリューアイコンをカスタマイズします。このクラスには、ID、First Name、Last Name、 Designation、Department、Gender、AgeとYear of Joiningのようなフィールドがあります。ワークシートにデータ型を追加するには、IRangeインタフェースのValueプロパティを使用することでセル値にオブジェクトとIRangeインタフェースのFormulaプロパティを使用することでセルに数式を設定します。 次の使用例では、B2 : B8とC2 : C3のセルに値を設定します。
データ型を含む通常がアクティブになっている場合、挿入ボタンがセルの右上に表示され、ユーザーは関連するプロパティ(フィールド)を右側の最も近い空のセルに追加できます。プロパティが入力されているセルには、関連する数式が含まれています。一方、データ型を含むテーブルセルがアクティブになっている場合、挿入ボタンがテーブルの右上に表示され、ユーザーは関連するプロパティ(フィールド)を追加できます。ユーザーがプロパティを選択すると、右側に新しい列が追加されます。新しく追加された列には、追加されたプロパティの名前があり、列にプロパティの関連する値が入力されます。関連する数式を持ちます。
カスタム.NETデータオブジェクトのプロパティを数式によってアクセスするには、次の書式を使用します。
B2.Property1
や
B2.[The Property 1]
次のコードは、データ型を追加する使用例を示します。
C# |
コードのコピー
|
---|---|
private void Form1_Load(object sender, EventArgs e) { // CalcFeaturesを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 }); // セル値にオブジェクト設定します。 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"; } } [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 |
コードのコピー
|
---|---|
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 |
ユーザーがFpSpread.ResolveCustomControlイベントを使用してデータカードポップアップをカスタマイズできます。次の使用例では、データカードを「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 |