作成日: 2022/05/18 最終更新日: 2022/05/18
文書種別
使用方法
詳細
FlexGridとFlexChartに同じデータをバインドして上下に配置し、グリッドの水平スクロールに合わせてチャートをスクロールする方法を紹介します。
それには、C1FlexGridコントロールのAfterScrollイベントでFlexChartコントロールのAxisX.MinとAxisX.Maxを変更します。
以下に簡単な設定例を記載します。
なお通常、グリッドにデータバインドするとデータは縦方向に追加されますが、グリッドの水平スクロールによってデータを横方向に変化させるために、このサンプルではデータバインド用の作業グリッドと表示用グリッドを用いて、前者のデータのX/Yを転置して後者に設定しています。

◎サンプルコード(VB)
それには、C1FlexGridコントロールのAfterScrollイベントでFlexChartコントロールのAxisX.MinとAxisX.Maxを変更します。
以下に簡単な設定例を記載します。
なお通常、グリッドにデータバインドするとデータは縦方向に追加されますが、グリッドの水平スクロールによってデータを横方向に変化させるために、このサンプルではデータバインド用の作業グリッドと表示用グリッドを用いて、前者のデータのX/Yを転置して後者に設定しています。
◎サンプルコード(VB)
Imports C1.Chart
Imports C1.Win.Chart
Imports C1.Win.C1FlexGrid
Public Class Form1
Dim temp As C1FlexGrid = New C1FlexGrid()
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' データの作成
Dim dt As DataTable = New DataTable()
dt.Columns.AddRange({New DataColumn("X", GetType(Int32)), New DataColumn("Y", GetType(Int32))})
Dim r1 As Random = New System.Random()
Dim i As Integer
For i = 0 To 19
dt.Rows.Add(i, r1.Next(50, 100))
Next
dt.AcceptChanges()
' チャートの設定
Dim series As Series = New Series()
series.Binding = "Y"
series.BindingX = "X"
FlexChart1.Series.Clear()
FlexChart1.Series.Add(series)
FlexChart1.ChartType = ChartType.LineSymbols
FlexChart1.DataSource = dt
' 作業用グリッドの設定
temp.DataSource = dt
temp.AllowSorting = AllowSortingEnum.None
' 表示用グリッドにデータのXYを転置してコピー
C1FlexGrid1.Cols.Count = temp.Rows.Count
C1FlexGrid1.Rows.Count = temp.Cols.Count
Dim r, c As Integer
For r = 0 To temp.Rows.Count - 1
For c = 0 To temp.Cols.Count - 1
C1FlexGrid1(c, r) = temp(r, c)
Next
Next
End Sub
Private Sub C1FlexGrid1_AfterScroll(sender As Object, e As RangeEventArgs) Handles C1FlexGrid1.AfterScroll
FlexChart1.AxisX.Min = CType(C1FlexGrid1.GetData(1, e.NewRange.c1), Integer)
FlexChart1.AxisX.Max = CType(C1FlexGrid1.GetData(1, e.NewRange.c2), Integer)
End Sub
End Class
◎サンプルコード(C#)
using C1.Chart;
using C1.Win.Chart;
using C1.Win.C1FlexGrid;
namespace prj_C1FlexGrid_FlexChart
{
public partial class Form1 : Form
{
C1FlexGrid temp = new C1FlexGrid();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
// データの作成
var dt = new DataTable();
dt.Columns.AddRange(new[] {
new DataColumn("X", typeof(Int32)),
new DataColumn("Y", typeof(Int32))
});
Random r1 = new System.Random();
for (var i = 0; i < 20; i++)
{
dt.Rows.Add(i, r1.Next(50, 100));
}
dt.AcceptChanges();
// チャートの設定
var series = new Series()
{
Binding = "Y",
BindingX = "X"
};
flexChart1.Series.Clear();
flexChart1.Series.Add(series);
flexChart1.ChartType = ChartType.LineSymbols;
flexChart1.DataSource = dt;
// 作業用グリッドの設定
temp.DataSource = dt;
temp.AllowSorting = AllowSortingEnum.None;
// 表示用グリッドにデータのXYを転置してコピー
c1FlexGrid1.Cols.Count = temp.Rows.Count;
c1FlexGrid1.Rows.Count = temp.Cols.Count;
for (int r = 0; r < temp.Rows.Count; r++)
for (int c = 0; c < temp.Cols.Count; c++)
c1FlexGrid1[c, r] = temp[r, c];
}
// 表示用グリッドのスクロール
private void c1FlexGrid1_AfterScroll(object sender, RangeEventArgs e)
{
flexChart1.AxisX.Min = (int)c1FlexGrid1.GetData(1, e.NewRange.c1);
flexChart1.AxisX.Max = (int)c1FlexGrid1.GetData(1, e.NewRange.c2);
}
}
}