MESCIUS SPREAD for Windows Forms 15.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 |