バージョン

CollectionBase から派生したクラスへのバインディング

Chart コントロールをバインドできるデータ ソースのひとつは、CollectionBase から派生したクラスです。

CollectionBase から派生したクラスに Chart をバインドするには、次の手順に従ってください。

  1. 最初に、CollectionBase に追加するクラスを必要とします。たとえば、Widget と呼ばれるクラスを使用します。

Visual Basic の場合:

Public Class Widget
    Public Sub New(ByVal name As String, ByVal marketValue As Double, ByVal magnitude As Long)
        Me.Name = name
        Me.MarketValue = marketValue
        Me.Magnitude = magnitude
    End Sub
    Private _name As String
    Private _marketValue As Double
    Private _magnitude As Long
    Public Property Name() As String
        Get
            Return Me._name
        End Get
        Set(ByVal Value As String)
            Me._name = Value
        End Set
    End Property
    Public Property MarketValue() As Double
        Get
            Return Me._marketValue
        End Get
        Set(ByVal Value As Double)
            Me._marketValue = Value
        End Set
    End Property
    Public Property Magnitude() As Long
        Get
            Return Me._magnitude
        End Get
        Set(ByVal Value As Long)
            Me._magnitude = Value
        End Set
    End Property
End Class

C# の場合:

/// <summary>
/// Widget クラス。
/// </summary>
public class Widget
{
	/// <summary>
	/// コンストラクタ
	/// </summary>
	/// <param name="name">名前</param>
	/// <param name="marketValue">Market 値</param>
	/// <param name="magnitude">Magnitude</param>
	public Widget(string name, double marketValue, long magnitude)
	{
		this.Name=name;
		this.MarketValue=marketValue;
		this.Magnitude=magnitude;
	}
	private string name;
	private double marketValue;
	private long magnitude;
	/// <summary>
	/// Public プロパティ名
	/// </summary>
	public string Name
	{
		get
		{
			return this.name;
		}
		set
		{
			this.name=value;
		}
	}
	/// <summary>
	/// Public プロパティ Market 値
	/// </summary>
	public double MarketValue
	{
		get
		{
			return this.marketValue;
		}
		set
		{
			this.marketValue=value;
		}
	}
	/// <summary>
	/// Public プロパティ Magnitude
	/// </summary>
	public long Magnitude
	{
		get
		{
			return this.magnitude;
		}
		set
		{
			this.magnitude=value;
		}
	}
}
  1. 次に、CollectionBase から継承するクラスを作成する必要があります。このサンプルでは、以下のクラスを使用します。

Visual Basic の場合:

Public Class MyCollection
  Inherits CollectionBase
	Public Sub Add(ByVal widget As Widget)
		Me.List.Add(widget)
	End Sub
	Default Public ReadOnly Property Item(ByVal index As Integer) As Widget
		Get
			Return CType(Me.List(index), Widget)
		End Get
	End Property
End Class

C# の場合:

/// <summary>
/// Custom コレクション
/// </summary>
public class MyCollection : CollectionBase
{
	/// <summary>
	/// コレクションに新しい項目を追加します。
	/// </summary>
	public virtual void Add(Widget widget)
	{
		this.List.Add(widget);
	}
	/// <summary>
	/// 指定したインデックスに要素を取得または設定します。
	/// </summary>
	public Widget this[int index]
	{
		get
		{
			return this.List[index] as Widget;
		}
	}
}
  1. 上記のクラスを作成すれば、以下の手段でそれらを初期化することについて移動します。最後に、グラフを作成される MyCollection のインスタンスにバインドします。

Visual Basic の場合:

Private Sub Binding_to_Classes_Derived_from_CollectionBase_Load( _
  ByVal sender As System.Object, _
  ByVal e As System.EventArgs) Handles MyBase.Load
	Dim col As New MyCollection()
	col.Add(New Widget("Nondescript Widget", 6.3, 4))
	col.Add(New Widget("Oblique Widget", 4.2, 3))
	col.Add(New Widget("Diet Widget", 7.9, 2))
	col.Add(New Widget("Widget of mysterious origin", 9.5, 1))
	Me.UltraChart1.Data.DataSource = col
End Sub

C# の場合:

private void Binding_to_Classes_Derived_from_CollectionBase_Load(object sender,
  EventArgs e)
{
	MyCollection col = new MyCollection();
	col.Add(new Widget("Nondescript Widget", 6.3, 4));
	col.Add(new Widget("Oblique Widget", 4.2, 3));
	col.Add(new Widget("Diet Widget", 7.9, 2));
	col.Add(new Widget("Widget of mysterious origin", 9.5, 1));
	this.ultraChart1.Data.DataSource=col;
}