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]

SpreadJSのセルにデータポップアップカード、異なるデータ型を表示するExcelのような機能を示します。

次のコードは、データ型を追加する使用例を示します。

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

 

 


© MESCIUS inc. All rights reserved.