You can use a sheet model as a template for a new custom model. For example, you might want to make a custom data model. Using a custom data model requires creating a class which implements ISheetDataModel, then setting an instance of the class into the SheetView.Models.Data property.
ISheetDataModel is the only interface required, assuming that you do not need any of the optional interfaces. For more information on the optional interfaces, refer to Understanding the Optional Interfaces.
All of the optional interfaces are implemented by DefaultSheetDataModel, so if you want any of them implemented on your data model, it may be easier to simply subclass DefaultSheetDataModel.
In BaseSheetDataModel, the Changed event is also implemented for you, along with the overloaded FireChanged method, so you do not need to provide an implementation of that event either. The event itself is the only thing in BaseSheetDataModel that is not virtual.
FireChanged and OnChanged are protected members of BaseSheetDataModel and are not part of any interface. They are virtual helper methods for the Changed event. The only difference between FireChanged and OnChanged is that OnChanged takes the EventArgs argument, and FireChanged takes the arguments used to create the EventArgs. FireChanged will not create the EventArgs object unless there is actually a handler attached to the delegate, so it is better to use that in subclasses for firing the event.
There is an example of a custom data model in the product samples, in the Samples\CS\FreeCell folder. It is an implementation of the game FreeCell inside a data model.
In a few cases, you may need to create your own custom data model for performance reasons. For example, suppose you want to display a large table of computed values (such as an addition or multiplication table) that consists of a million rows by ten columns. If you used the default sheet data model, you would need to compute and store all ten million values which would consume a lot of time and memory. Here is example code that creates a custom data model that enhances performance.
Example
This example creates a custom data model.
C# | Copy Code |
---|---|
for (r = 0; r < 1000000; r++) for ( c = 0; c < 10; c++) spread.Sheets[0].Cells[r,c].Value = r + c; class ComputedDataModel : BaseSheetDataModel { public override int RowCount { get { return 1000000; } } public override int ColumnCount { get { return 10; } } public override object GetValue(int row, int column) { return row + column; } } |
Return to the overview of Using Sheet Models.