控件中国网现已改版,您看到的是老版本网站的镜像,系统正在为您跳转到新网站首页,请稍候.......
中国最专业的商业控件资讯网产品咨询电话:023-67870900 023-67871946
产品咨询EMAIL:SALES@COMPONENTCN.COM

Spread for Windows Forms高级主题(2)---理解单元格类型

作者:佚名 出处:cnblogs 2012年03月21日 阅读:

理解单元格类型基本信息

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!”示例显示了自定义单元格类型

热推产品

  • ActiveReport... 强大的.NET报表设计、浏览、打印、转换控件,可以同时用于WindowsForms谀坔攀戀Forms平台下......
  • AnyChart AnyChart使你可以创建出绚丽的交互式的Flash和HTML5的图表和仪表控件。可以用于仪表盘的创......
首页 | 新闻中心 | 产品中心 | 技术文档 | 友情连接 | 关于磐岩 | 技术支持中心 | 联系我们 | 帮助中心 Copyright-2006 ComponentCN.com all rights reserved.重庆磐岩科技有限公司(控件中国网) 版权所有 电话:023 - 67870900 传真:023 - 67870270 产品咨询:sales@componentcn.com 渝ICP备12000264号 法律顾问:元炳律师事务所 重庆市江北区塔坪36号维丰创意绿苑A座28-5 邮编:400020
在线客服
在线客服系统
在线客服
在线客服系统