MESCIUS SPREAD for Windows Forms 17.0J
セル範囲との連結

チャートの系列は、次の部分で構成されています。

SeriesDataFieldクラスのインスタンスを使用して、それぞれの部分をセル範囲に連結できます。

SeriesDataFieldクラスを使用して、各系列をセル範囲に連結する方法の他に、SheetViewクラスのAddChartメソッドを使用して、セル範囲に連結されたチャートをシートに追加する方法があります。この場合、対象のセル範囲から、系列が自動的に作成されます。

設定方法

対象の系列(たとえば折れ線チャートであれば、LineSeriesクラス)の次のプロパティに、SeriesDataFieldオブジェクトを設定します。SeriesDataFieldオブジェクトのFormulaプロパティで、連結するセル範囲、または数式を指定します。

サンプルコード

次のサンプルコードは、まず、フォームのLoadイベントでSheetViewクラスのAddChartメソッドを使用して、セル範囲に連結されたチャートを追加します。

次にボタンのClickイベントで、セルにデータを追加し、チャートを新しいセル範囲に連結します。既存の系列のカテゴリ名、データ、新しい系列の系列名、およびデータを、それぞれSeriesDataFieldオブジェクトを使用してセル範囲に連結します。

C#
コードのコピー
private void Form1_Load(object sender, EventArgs e)
{
    object[,] values = { { "", "Category-1", "Category-2" }, { "Series-A", 2.0, 5.0 }, { "Series-B", 4.0, 5.0 } };
    fpSpread1.Sheets[0].SetArray(0, 0, values);
    FarPoint.Win.Spread.Model.CellRange cellRange = new FarPoint.Win.Spread.Model.CellRange(0, 0, values.GetLength(0), values.GetLength(1));
    fpSpread1.Sheets[0].AddChart(cellRange, typeof(FarPoint.Win.Chart.LineSeries), 400, 400, 100, 100);
}
private void button1_Click(object sender, EventArgs e)
{
    fpSpread1.Sheets[0].SetArray(0, 3, new object[,] { { "Category-3" }, { 4.0 }, { 2.0 } });
    fpSpread1.Sheets[0].SetArray(3, 0, new object[,] { { "Series-C", 3.0, 2.0, 1.0 } });
    FarPoint.Win.Chart.YPlotArea plotArea = (FarPoint.Win.Chart.YPlotArea)fpSpread1.Sheets[0].Charts[0].Model.PlotAreas[0];
    FarPoint.Win.Chart.LineSeries series;
    FarPoint.Win.Spread.Chart.SeriesDataField data;
    series = (FarPoint.Win.Chart.LineSeries)plotArea.Series[0];
    series.CategoryNames.DataSource = new FarPoint.Win.Spread.Chart.SeriesDataField(fpSpread1, "DataFieldCategoryName", "Sheet1!$B$1:$D$1", FarPoint.Win.Spread.Chart.SegmentDataType.Text);
    data = (FarPoint.Win.Spread.Chart.SeriesDataField)series.Values.DataSource;
    data.Formula = "Sheet1!$B$2:$D$2";
    series = (FarPoint.Win.Chart.LineSeries)plotArea.Series[1];
    data = (FarPoint.Win.Spread.Chart.SeriesDataField)series.Values.DataSource;
    data.Formula = "Sheet1!$B$3:$D$3";
    series = new FarPoint.Win.Chart.LineSeries();
    series.SeriesNameDataSource = new FarPoint.Win.Spread.Chart.SeriesDataField(fpSpread1, "DataFieldSeriesName", "Sheet1!$A$4:$A$4", FarPoint.Win.Spread.Chart.SegmentDataType.Text);
    series.Values.DataSource = new FarPoint.Win.Spread.Chart.SeriesDataField(fpSpread1, "DataFieldValue", "Sheet1!$B$4:$D$4");
    plotArea.Series.Add(series);
}
Visual Basic
コードのコピー
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Dim values As Object(,) = {{"", "Category-1", "Category-2"}, {"Series-A", 2.0, 5.0}, {"Series-B", 4.0, 5.0}}
    FpSpread1.Sheets(0).SetArray(0, 0, values)
    Dim cellRange As New FarPoint.Win.Spread.Model.CellRange(0, 0, values.GetLength(0), values.GetLength(1))
    FpSpread1.Sheets(0).AddChart(cellRange, GetType(FarPoint.Win.Chart.LineSeries), 400, 400, 100, 100)
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    FpSpread1.Sheets(0).SetArray(0, 3, New Object(,) {{"Category-3"}, {4.0}, {2.0}})
    FpSpread1.Sheets(0).SetArray(3, 0, New Object(,) {{"Series-C", 3.0, 2.0, 1.0}})
    Dim plotArea As FarPoint.Win.Chart.YPlotArea = DirectCast(FpSpread1.Sheets(0).Charts(0).Model.PlotAreas(0), FarPoint.Win.Chart.YPlotArea)
    Dim series As FarPoint.Win.Chart.LineSeries
    Dim data As FarPoint.Win.Spread.Chart.SeriesDataField
    series = DirectCast(plotArea.Series(0), FarPoint.Win.Chart.LineSeries)
    series.CategoryNames.DataSource = New FarPoint.Win.Spread.Chart.SeriesDataField(FpSpread1, "DataFieldCategoryName", "Sheet1!$B$1:$D$1", FarPoint.Win.Spread.Chart.SegmentDataType.Text)
    data = DirectCast(series.Values.DataSource, FarPoint.Win.Spread.Chart.SeriesDataField)
    data.Formula = "Sheet1!$B$2:$D$2"
    series = DirectCast(plotArea.Series(1), FarPoint.Win.Chart.LineSeries)
    data = DirectCast(series.Values.DataSource, FarPoint.Win.Spread.Chart.SeriesDataField)
    data.Formula = "Sheet1!$B$3:$D$3"
    series = New FarPoint.Win.Chart.LineSeries()
    series.SeriesNameDataSource = New FarPoint.Win.Spread.Chart.SeriesDataField(FpSpread1, "DataFieldSeriesName", "Sheet1!$A$4:$A$4", FarPoint.Win.Spread.Chart.SegmentDataType.Text)
    series.Values.DataSource = New FarPoint.Win.Spread.Chart.SeriesDataField(FpSpread1, "DataFieldValue", "Sheet1!$B$4:$D$4")
    plotArea.Series.Add(series)
End Sub

次のサンプルコードは、コントロールをデータテーブルに連結した例です。セルには、データテーブルのデータが設定されています。これらのデータを使用したチャートを、SheetViewクラスのAddChartメソッドで追加しています。

C#
コードのコピー
DataTable dt = new DataTable("Test");
DataRow dr = default(DataRow);
dt.Columns.Add("Series1");
dt.Columns.Add("Series2");
dr = dt.NewRow();
dr[0] = 1;
dr[1] = 4;
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = 2;
dr[1] = 5;
dt.Rows.Add(dr);
dr = dt.NewRow();           
dr[0] = 3;
dr[1] = 6;           
dt.Rows.Add(dr);
fpSpread1.DataSource = dt;
FarPoint.Win.Spread.Model.CellRange cellRange = new FarPoint.Win.Spread.Model.CellRange(0, 0, 3, 3);
fpSpread1.Sheets[0].AddChart(cellRange, typeof(FarPoint.Win.Chart.PointSeries), 400, 400, 0, 0);
Visual Basic
コードのコピー
Dim dt As New DataTable("Test")
Dim dr As DataRow
dt.Columns.Add("Series1")
dt.Columns.Add("Series2")
dr = dt.NewRow()
dr(0) = 1
dr(1) = 4
dt.Rows.Add(dr)
dr = dt.NewRow()
dr(0) = 2
dr(1) = 5
dt.Rows.Add(dr)
dr = dt.NewRow()
dr(0) = 3
dr(1) = 6
dt.Rows.Add(dr)
FpSpread1.DataSource = dt
Dim cellRange As New FarPoint.Win.Spread.Model.CellRange(0, 0, 3, 3)
FpSpread1.Sheets(0).AddChart(cellRange, GetType(FarPoint.Win.Chart.PointSeries), 400, 400, 0, 0)

 

参照

 

 


© MESCIUS inc. All rights reserved.