理解单元格类型基本信息
Spread支持几十种单元格类型,如复选框单元格、日期时间单元格、或者一个简单的文本单元格。单元格类型可以对单独的单元格、列、行
、一个单元格区域,甚至是整个表单进行设置。单元格类型决定了用户与单元格交互的方式,包括如何对数据进行访问、显示和校验等。单元
格类型为单元格定义了一个editor用以处理输入数据,一个formatter用以分析和格式化数据,还有一个render用以控制单元格的数a据如何
显示。
Editor,Formatter,以及 Renderer
一个单元格类型包括一个editor,一个renderer,以及一个formatter。editor负责在编辑模式中,创建和控制单元格编辑控件。
formatter负责转换单元格的值,转化为文本或者从文本格式进行 转换,(举例来说,当获取或者设置一个单元格的Text属性)。renderer
负责绘制单元格(此时单元格不处于编辑模式)。
在大多数情况下,你想要此单元格无论是否在编辑模式,在外观上来看都是一样。在这种情况下,你只需要创建单一的单元格类型,并且将其
设置为单元格的CellType属性。这种单一的单元格类型被用来创建单元格的editor,renderer,以及formatter。如果你想要根据是不是处
于编辑模式来进行不同的外观显示,那么你就要创建两种单元格类型并且将一种单元格作为单元格editor的类型,另外一种设为单元格
renderer的类型。你可能也想将一种单元格类型赋给单元格formatter. 更多相关信息,请参阅ICellType 接口。
EditBaseCellType
单元格编辑的设计需要单元格类型返回单元格之上的editor控件。单元格的editor控件可以以文本作为基础 (例如文本框)或者以图形为基
础(例如复选框)。editor控件可以进行下拉列表(例如组合框)或者弹出对话框(例如日期选择器)。EditBaseCellType类是这样一种类
,它是内置的以文本为基础的单元格类型(比如,一般信息,文本,数字,日期,等等)的来源。这个类也可以导出文本类型的自定义单元格
类型。ISubEditor接口可以用来将以文本为基础的单元格editor和下拉列表联系起来(例如复选框)或者弹出对话框(例如日期/选择框)。
数据模型可以持有数据,包括颜色。单元格类型常常在数据模型中传递原始数据。
头部单元格
头部的单元格是可以渲染的,但是是不可编辑的。虽然你可以将一种单元格类型赋给行头或者列头的单元格,但是单元格类型仅仅用来描绘。
在单元格中,编辑操作被限制在数据区域的单元格中。如果你想将一些可编辑的部件像 表头那样进行操作,你可以将列头隐藏(或者关闭) ,
将表单的第一行冻结,然后使用冻结的行作为你的伪头部单元格。
对象层次
Spread控件中的对象,例如表单、行和单元格等,有很多格式和其他的属性继承自它的 “父母”。一个单元格可以从一个表单中继承格式,例
如背景颜色。如果你对一列中所有单元格的文本对齐方式进行了设置,则单元格同样继承了该对齐方式。由于对象继承,很多属性和方法可以
使用不同的方式应用在表单的不同部分。
你可以重载一个独立的单元格所继承的格式,但对象默认继承父类的属性。所以在一个给定的上下文中,任何一个对象的设置综合了应用在其
上的父类属性。例如,你可以为一个单元格在单元格级别上设置文本颜色,但它可能从其所在行继承了垂直对齐方式,从其所在列继承了边界
属性,并从其所在表单继承了背景颜色。由于背景颜色可能在这些多个层次上被设置,因此必须采用某些优先级规则。
越靠近单元格级别,优先级越高。所以如果你在单元格中设置了背景颜色,那么从父类继承而来的设置将会被覆盖。请参阅如下的属性优先级
列表。越靠近单元格(数字越小),优先级越高。
1. 单元格
2. 行
3. 列
4. 交替行
5. 表单
6. 控件
下面的示例代码把表单的背景设为黄色,第二行和第三行的背景设为绿色,第三列的背景设为蓝色,第三行第三列的单元格背景设为红色。可
以从效果图上看出表单、列、行和单元格之间的优先级关系。
fpSpread1.Sheets[0].DefaultStyle.BackColor = Color.Yellow;
fpSpread1.Sheets[0].Rows[1].BackColor = Color.Green;
fpSpread1.Sheets[0].Rows[2].BackColor = Color.Green;
fpSpread1.Sheets[0].Columns[2].BackColor = Color.Blue;
fpSpread1.Sheets[0].Cells[2,2].BackColor = Color.Red;
image
自定义弹出的日期时间控件
如果你在编辑模式下按下F4键或者双击的日期时间单元格,一个弹出日历(或者弹出时钟)就会显示。如果你将格式设置为TimeOnly,那么
就会显示一个时钟控件。你在日历中选择的日期(或者在时钟中选择的时间)被放置在日期时间单元格中。如果你想要显示日期与时间,你可
以在日历控制中点击“Today”;如果你想要显示时间,你可以在时钟控制里点击“Now”。
弹出日历控件
弹出时钟控件
image image
你可以指定日期和月份的常规名称和缩写名称,并且可以指定控件底部按钮的文本。使用 DateTimeCellType类的SetCalendarText 方法
对它们进行设置。
请注意按钮中心显示的文本。请尽量把将文本长度限制为8或9个字符。虽然按钮可以显示10个字符,但第一个和最后一个字符将会非常接近
按钮的边缘。
当使用控件时,仅需点击确定或取消按钮关闭控件。“Today”(或者“Now”)按钮可以简单地将单元格中的值设置为当前日期(或时间)。
更多有关日期和时间单元格格式的设置,请参阅DateTimeFormat 枚举类型。
下面的示例代码设置按钮的文本,并且在数组列表中指定日期和月份的名称。
?
FarPoint.Win.Spread.CellType.DateTimeCellType datecell = new FarPoint.Win.Spread.CellType.DateTimeCellType();
string[] daynames = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
string[] months = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October",
"November", "December"};
string[] dayabbrev = {"Su","My","Ty","Wy","Th","Fy","Sy"};
string[] mthabbrev = {"Jy","Fy","Mh","Al","My","Jn","Jl","At","Sr","Or","Nr","Dr"};
string okbuttn = "Fine";
string cancelb = "Quit";
datecell.DateTimeFormat = FarPoint.Win.Spread.CellType.DateTimeFormat.UserDefined;
datecell.UserDefinedFormat = "dddd MMMM d, yyyy";
datecell.SetCalendarText(daynames,months,dayabbrev,mthabbrev,okbuttn, cancelb);
fpSpread1.ActiveSheet.Cells[1, 1].CellType = datecell;
fpSpread1.ActiveSheet.Cells[1, 1].Value = System.DateTime.Now;
fpSpread1.ActiveSheet.Columns[1].Width = 130;
自定义自动完成(预先键入)
你可以根据用户在单元格中的输入进行自动完成(预先输入),使用IAutoCompleteSupport 接口及其属性以便在可编辑单元格中提供自
动完成的特性。
image
基本上有两个属性可以进行设置。第一个你可以设置自动完成的模式,如上图所示。这个选项包括提示一个可能的单词或一个可能的自动完成
的下拉列表,或是两者都有,又或是两者都没有。
第二个属性,你可以设置自动完成的来源。这个来源被当做是自动完成的项目的列表。你可以创建一个自定义源并且定义你自己的项目清单,
或者你可以设置不同的系统资源为源。接口中有两种属性提供对自定义源的设置。第一个是为自定义源设置可能的候选选项。第二个是设置是
否使用此列中的其他单元格的数值列表填充该列表。要使用该列的单元格中的数据,例如,你可以设置源为自定义源,然后开启自动补齐。如
果条目在单元格的上面或者下面没有空白的单元格间隔,那么自动补齐仅仅是向自定义源中添加项目。
想要查看上面图片背后的代码,请参阅与产品一同安装的SpreadWinDemo示例。
使用子编辑器
对于几种可编辑的单元格类型,当你点击单元格的内部时,就会显示一个编辑器。你可以扩展这个简单的行编辑器,并且提供一个自定义用户
界面 (为用户提供若干的设置来辅助用户进行便捷输入) 这个接口的其他层级是受子控制器或单元格编辑器的editor控制的。例如,当你选
择日期时间单元格时,你可以向用户可以提供一个日历以便选择一个日期。这个日历控件将被称为子编辑器。
创建一个子编辑器
你可以创建你自己的子编辑器,当此操作完成时,此编辑器就会显示。
通过点击F4键
通过在编辑模式中双击单元格
通过点击下拉按钮(当DropDownButton属性被设为“True”时)
创建你自己的子编辑器的步骤是:
1) 为一个子编辑器创建一个新的Form类。
2) 对这个你刚创建的Form实现ISubEditor接口。
3) 对调用函数设置子编辑器(SubEditor属性)
关于子编辑器的示例,请参阅上面“自定义弹出的日期时间控件”,这里日历子编辑器在日期时间单元格中可用。
禁用子编辑器
在可编辑单元格类型中,当你点击单元格内部时,就会默认地显示一个子编辑器。但是有的时候你可能想禁用这些子编辑器。例如,在日期时
间单元格中,你可能想要禁止弹出的日历控件; 在数字单元格中你可能想要禁止弹出的计算器控件。
要禁用子编辑器,你可以在SubEditorOpening事件中设置e.Cancel为“True”:
private void FpSpread1_SubEditorOpening(object sender, FarPoint.Win.Spread.SubEditorOpeningEventArgs e)
{
e.Cancel = true;
}
创建自定义的单元格类型
你可以通过创建一个继承自已存在的单元格类型的子类(就是说要重载这个类中的每一个方法)来创建你自己的单元格类型。如果自定义单元
格类型要使用剪贴板或者要使用导出到Excel的方法,那么自定义单元格类应当被标记为“Serializable”。
Spread演示事例中的自定义编辑器示例(Spread for Windows Forms 5\samples folder)显示了如何使用控件使之成为单元格editor
。示例文件夹中的那个“FarOut!”示例显示了自定义单元格类型
Spread for Windows Forms高级主题(2)---理解单元格类型
热推产品
- ActiveReport... 强大的.NET报表设计、浏览、打印、转换控件,可以同时用于WindowsForms谀坔攀戀Forms平台下......
- AnyChart AnyChart使你可以创建出绚丽的交互式的Flash和HTML5的图表和仪表控件。可以用于仪表盘的创......
推荐产品