GrapeCity.Win.MultiRow.v80 アセンブリ > GrapeCity.Win.MultiRow 名前空間 > ListLabelCell クラス : Clone メソッド |
このメソッドは、この Cell の Cell.Name プロパティをコピーしません。Name プロパティは Template 内での Cell の一意の識別子なので、このプロパティをクローンするのは適切ではありません。
Cell クラスの派生クラスを作成してそのクラスに新しいプロパティを追加する場合は、必ず Clone メソッドをオーバーライドしてください。
継承時の注意:
派生クラスで Clone メソッドをオーバーライドする場合は、基本クラスの Clone メソッドを呼び出して、基本クラスのプロパティが新しいセルにコピーされるようにしてください。また、派生クラスに追加したすべてのプロパティの値も必ずコピーしてください。
public class ListBoxCell : Cell { public override Type EditType { get { return typeof(ListBoxEditingControl); } } List<string> _items = new List<string>(); public List<string> Items { get { return _items; } } protected override void InitializeEditingControl(int rowIndex, object formattedValue, CellStyle style) { // Apply the settings of cell to editing control. base.InitializeEditingControl(rowIndex, formattedValue, style); ListBoxEditingControl listBoxEditingControl = this.GcMultiRow.EditingControl as ListBoxEditingControl; for (int i = 0; i < this._items.Count; i++) { listBoxEditingControl.Items.Add(this._items[i]); } listBoxEditingControl.FormattedValue = formattedValue; } protected override void TerminateEditingControl(int rowIndex) { ListBoxEditingControl listBoxEditingControl = this.GcMultiRow.EditingControl as ListBoxEditingControl; // For performance reason, MultiRow use same instance for all cells. // So, when leave editing status, you should clear items, to prepare editing control be used next time. listBoxEditingControl.Items.Clear(); base.TerminateEditingControl(rowIndex); } public override object Clone() { // When you derive from Cell and add new properties to the derived class, be sure to // override the Clone method to copy the new properties during cloning operations. // You should also call the base class's Clone method so that the properties of the // base class are copied to the new cell. ListBoxCell listBoxCell = base.Clone() as ListBoxCell; listBoxCell.Items.AddRange(this.Items); return listBoxCell; } }
Public Class ListBoxCell Inherits Cell Public Overloads Overrides ReadOnly Property EditType() As Type Get Return GetType(ListBoxEditingControl) End Get End Property Private _items As New List(Of String)() Public ReadOnly Property Items() As List(Of String) Get Return _items End Get End Property Protected Overloads Overrides Sub InitializeEditingControl(ByVal rowIndex As Integer, ByVal formattedValue As Object, ByVal style As CellStyle) ' Apply the settings of cell to editing control. MyBase.InitializeEditingControl(rowIndex, formattedValue, style) Dim listBoxEditingControl As ListBoxEditingControl = TryCast(Me.GcMultiRow.EditingControl, ListBoxEditingControl) For i As Integer = 0 To Me._items.Count - 1 listBoxEditingControl.Items.Add(Me._items(i)) Next listBoxEditingControl.FormattedValue = formattedValue End Sub Protected Overloads Overrides Sub TerminateEditingControl(ByVal rowIndex As Integer) Dim listBoxEditingControl As ListBoxEditingControl = TryCast(Me.GcMultiRow.EditingControl, ListBoxEditingControl) ' For performance reason, MultiRow use same instance for all cells. ' So, when leave editing status, you should clear items, to prepare editing control be used next time. listBoxEditingControl.Items.Clear() MyBase.TerminateEditingControl(rowIndex) End Sub Public Overloads Overrides Function Clone() As Object ' When you derive from Cell and add new properties to the derived class, be sure to ' override the Clone method to copy the new properties during cloning operations. ' You should also call the base class's Clone method so that the properties of the ' base class are copied to the new cell. Dim listBoxCell As ListBoxCell = TryCast(MyBase.Clone(), ListBoxCell) listBoxCell.Items.AddRange(Me.Items) Return listBoxCell End Function End Class