Spread ASP.NET allows you to create your own custom cell types. This can be useful if a default cell type does not have the feature you need. You can implement your own types of cells by creating a subclass that inherits an existing cell type (that is, override methods in that class). The custom cell type class should be marked as serializable so it works for the view state. The BaseCellType class is a class from which the built-in text based cell types (for example, general, text, number, data-time, and so on.) are derived. The class can also be used to derive custom cell types that are text based. The data model can hold any value, including colors. The cell type is always passed the raw value from the data model. You can override any of the following methods to create a custom cell. BaseCellType methods:
Clone
Creates a new copy of the object using the MemberwiseClone method.
Format
When deriving a cell type based on this type, override this to change what gets passed back and formatted as a string into the cell on the sheet from the object in the data model.
GetEditorControl
Gets the control used to edit the cell.
GetEditorValue
Gets the value from the editing control used for the cell.
GetPreferredSize
Gets the preferred (maximum required) size of the cell for the renderer control when printing to PDF.
GetValidators
Gets the validator collection, overwrite this method to allow customizing the returned result from the Validators property.
PaintCell
Gets a control and renders it in the cell based on the specified appearance, margin, and value.
Parse
When deriving a cell type based on this type, override this to change what gets parsed from the cell on the sheet and put in the data model.
RendererClientScriptUrl2
Gets the URL of the client script file for the renderer for the specified Spread component, if the renderer supports client-side scripting.
SetTabIndex
Sets TabIndex for the editor.
ToString
Gets the name of the cell type.
ValidateEditorValue
Validates the given value.
The Format method is used to get the string value to put in the clipboard text for the cell. The Parse method is used to convert that clipboard text back into a value when pasting. The methods are also generally used for converting the raw value to a string and back when editing, but that depends on the implementation of the cell type (most built-in cell types operate that way but a custom cell type does not need to). For example, the custom cell type might allow the user to edit the value as a URL string, and render it with an image tag, if the custom cell type displays an image. In that case, Format or Parse might not actually be needed since it would just copy or paste the raw URL value and also use that in the data model. You can override any of the following properties in the BaseCellType class:
EditorClientScriptUrl
Gets the URL of the client script file for the editor, if the editor supports client-side scripting.
RendererClientScriptUrl
Gets the URL of the client script file for the renderer, if the renderer supports client-side scripting.
Validators
Gets the validator collection.
The RenderClientScriptUrl2 method and the RenderClientScriptUrl and EditorClientScriptUrl properties do not take effect with Internet Explorer 10 or higher or with other browsers such as Firefox or Chrome. They are provided for the older style HTC model. This example creates a custom cell from a combo cell and overrides the GetEditorControl method to disable a specific item in the drop-down list. C#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using FarPoint.Web.Spread;
namespace SpreadASPNET8CSharp
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
customCombo ComboCell = new customCombo();
ComboCell.Items = new String[] { "Jan", "Feb", "March", "April" };
ComboCell.BackColor = System.Drawing.Color.Aqua;
FpSpread1.Sheets[0].Cells[0, 0].CellType = ComboCell;
}
}
[Serializable()]
public class customCombo : FarPoint.Web.Spread.ComboBoxCellType
{
public override Control GetEditorControl(string id, TableCell parent, Appearance style, Inset margin, object value, bool upperLevel)
{
DropDownList ddl = (System.Web.UI.WebControls.DropDownList)base.GetEditorControl(id, parent, style, margin, value, upperLevel);
if (ddl != null)
{
foreach (System.Web.UI.WebControls.ListItem item in ddl.Items)
{
if (item.Value == "Feb")
{
item.Attributes.Add("disabled", "disabled");
}
}
}
return ddl;
}
}
}
VB
Imports FarPoint.Web.Spread
Public Class WebForm1
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim ComboCell As New customCombo
ComboCell.Items = New String() {"Jan", "Feb", "March", "April"}
ComboCell.BackColor = Drawing.Color.Aqua
FpSpread1.Sheets(0).Cells(0, 0).CellType = ComboCell
End Sub
End Class
<Serializable()> Public Class customCombo
Inherits FarPoint.Web.Spread.ComboBoxCellType
Public Overrides Function GetEditorControl(id As String, parent As TableCell, style As Appearance, margin As Inset, value As Object, upperLevel As Boolean) As Control
Dim ddl As DropDownList = CType(MyBase.GetEditorControl(id, parent, style, margin, value, upperLevel), System.Web.UI.WebControls.DropDownList)
If IsNothing(ddl) Then Exit Function
For Each item As System.Web.UI.WebControls.ListItem In ddl.Items
If item.Value = "Feb" Then
item.Attributes.Add("disabled", "disabled")
End If
Next
Return ddl
End Function
End Class
You can download a larger example that demonstrates custom cells and renderers from this link: EditorRendererCS. The zip file does not contain the Spread ASP.NET assemblies.