Spread for Windows Forms高级主题(5)---数据处理

使用表单的API处理数据

你可以将数据以有格式或无格式字符串或者数据对象的形式填充到单元格中。将数据填充到单元格的最好方式取决于你想添加字符串数据还是数据对象,以及你想添加数据到单一的单元格还是某个范围内的所有单元格。

举例来说,如果你使用的数据来自用户的文本框中,你可能想要添加由Spread控件解析的字符串数据。如果你想要添加多个值,并想要直接将它们添加到数据模型中,可以以对象的方式添加它们。

下表汇总了在表单级别添加数据的方法。

数据描述

单元格数目

方法名

具有格式的字符串(例如"$1,234.56")

单个单元格

GetText SetText

单元格区域

GetClip SetClip

没有格式的字符串(例如"1234.45")

单个单元格

GetValue SetValue

单元格区域

GetClipValue SetClipValue

具有格式的数据对象

单元格区域

GetArray SetArray

当你使用带格式的数据时,为单元格设置格式的单元格类型解析数据,并将数据存放在数据模型中。当你使用不带格式的数据时,数据则直接保存在数据模型中。如果你要把数据添加到直接保存在数据模型的表单中,你可能需要解析这些数据,因为控件没有进行解析。

为了向控件中添加大量的数据,可以考虑创建和打开现有的文件,如文本文件或Excel格式的文件。你也可以通过保存数据并格式化为一个文本文件,Excel格式文件,或Spread XML文件来恢复数据。

下面的示例代码将带格式的数据添加到一个单元格区域中:

// 添加数据到A1至C3单元格.

fpSpread1.Sheets[0].SetClip(0, 0, 3, 3,"Sunday\tMonday\tTuesday\r\nWednesday\tThursday\tFriday\r\nSaturday\tSunday\tMonday");

填充区域单元格的值

你可以复制一个单元格区域,并用该单元格区域填充另一个区域内的单元格,可以复制数据及单元格类型等。例如,如果现有一个2行2列的单元格区域,你可以重复向下垂直填充5组2行2列的单元格区域。

使用FillRange方法。该方法使用的参数有:

  • 开始单元格的行索引和列索引
  • 要复制区域的行数和列数
  • 将选定区域复制到的行数(当向左或右时)或列数(当向上或下时)(不是复制操作的重复次数;而是行或列的数目)。

例如,使用下面的代码,你可以实现上图所示的结果。

// 定义需要反复填充区域的Text属性.

fpSpread1.ActiveSheet.Cells[0, 0].Text = "A1-text";

fpSpread1.ActiveSheet.Cells[0, 1].Text = "A2-text";

fpSpread1.ActiveSheet.Cells[1, 0].Text = "B1-text";

fpSpread1.ActiveSheet.Cells[1, 1].Text = "B2-text";

fpSpread1.ActiveSheet.Cells[0, 0].BackColor = Color.Cyan;

fpSpread1.ActiveSheet.Cells[0, 0].ForeColor = Color.DarkBlue;

fpSpread1.ActiveSheet.Cells[0, 1].BackColor = Color.Coral;

fpSpread1.ActiveSheet.Cells[0, 1].ForeColor = Color.DarkRed;

// 用两行一列的内容填充右边的3列区域

fpSpread1.ActiveSheet.FillRange(0, 1, 2, 1, 3, FillDirection.Right);

// 用两行两列的内容填充下边的4行区域

fpSpread1.ActiveSheet.FillRange(0, 0, 2, 2, 4, FillDirection.Down);

复制表单的数据

你可以使用表单的Copy方法从单元格复制数据,并粘贴到其他单元格。

当你将数据复制到一个单元格(或一个单元格区域)时,数据会替代目标单元格(单元格区域)中的数据。如果该操作复制了一个单元格区域,并将其粘贴到一个位置重叠的区域,那么所有你要粘贴的单元格的值都会被复制的单元格的值所替代。

你可以指定当单元格或单元格区域被复制时,其中的公式是否自动更新。

移动表单中的数据

你可以使用表单的Move方法 将一个单元格或一个单元格区域的数据移动到另一个单元格或另一个单元格区域。

当你把数据从一个单元格(或一个单元格区域)移动到另一个单元格时(或单元格区域),原单元格(或单元格区域)中的数据就会替代目标单元格(或单元格区域)中的数据。如果该操作移动了一个单元格区域,并将其移动到一个位置重叠的区域,那么所有你要移动的单元格的值都会被移动的单元格的值所替代。

当单元格或单元格区域被移动时,你可以指定其中的公式是否自动更新。

为了将表单的3行数据向上移动,并将5行数据向下移动,你可能需要在目标位置处插入空行。为了将3行向上移动,5行向下移动,首先临时复制五行数据,然后将3行数据向上移动到它们的目标位置,然后再将复制的五行分配到正确的位置。

下面的代码完成上述操作:

FarPoint.Win.Spread.Model.DefaultSheetDataModel dm = new DefaultSheetDataModel(5, this.fpSpread1.Sheets[0].Models.Data.ColumnCount);

dm.SetArray(0, 0, (this.fpSpread1.Sheets[0].Models.Data as FarPoint.Win.Spread.Model.DefaultSheetDataModel).GetArray(0, 0, 5, 5));

dm.RemoveRows(0, 5);

dm.AddRows(0, 3);

dm.Move(this.fpSpread1.Sheets[0].Models.Data.RowCount - 4, 0, 0, 0, 3, this.fpSpread1.Sheets[0].Models.Data.ColumnCount);

dm.RemoveRows(this.fpSpread1.Sheets[0].Models.Data.RowCount -4, 3);

dm.AddRows(this.fpSpread1.Sheets[0].Models.Data.RowCount, 5);

dm.SetArray(this.fpSpread1.Sheets[0].Models.Data.RowCount - 6, 0, dm.GetArray(0, 0, 5, this.fpSpread1.Sheets[0].Models.Data.ColumnCount));

交换表单中的数据

你可以交换两个单元格或两个单元格区域的内容。

当你交换两个单元格或两个单元格区域的数据时,单元格的设置也会随着数据一起交换。如果你所做的设置是针对包含单元格的整个列或行或整个表单,而不是针对单元格自身所做的设置,那么这些设置不会被交换。例如,如果你将源单元格的背景色设置为红色,那么背景色能够被交换过去,目标单元格的背景色就变成了红色。然而,如果你将包含源单元格的列的背景色设置为红色,那么该设置不会被交换。

当你把数据从一个单元格交换到另外一个时,那么一个单元格中的数据就会变成另外一个单元格的数据,反之亦然。例如,如果单元格A1包含值4,单元格B3包含值6,那么当你交换这两个单元格时,A1单元格的值就会变成6,B3单元格的值会变成4。

如果你尝试将目标区域与一个比它的可用区域大的区域进行交换时,交换操作不会执行。例如,如果你想交换一个含4个单元格的区域,而指定目标区域为表单边界的一个单元格时,那么交换操作不会发生。

如果交换操作要交换有重叠区域的单元格,那么独立的单元格从重叠区域的转角处开始交换。

这里是一个交换单元格区域的代码示例:

fpSpread1.ActiveSheet.RowCount = 10; 

fpSpread1.ActiveSheet.ColumnCount = 10; 

private void button1_Click(object sender, System.EventArgs e) 

{

fpSpread1.ActiveSheet.SwapRange(0, 0, 3, 0, 3, 3, true); 

} 

删除表单中的数据

你可以删除所选的单个单元格或多个单元格或一个单元格区域中的数据以及单元格格式,或只删除数据,保留单元格的格式。想了解更多有关单元格格式的信息,请参考理解单元格类型如何显示数据。你可以使用任意一个清除方法或使用剪贴板的剪切数据操作来删除数据。

你可以使用默认数据模型中任意一个清除方法来删除数据:

  • Clear方法,删除数据和公式。
  • ClearFormulas方法,只删除公式。
  • ClearData方法,只删除数据。
  • ClearCustomNames方法,清除自定义名称;以及ClearCustomFunctions方法,清除自定义函数。
  • ClearRange方法,清除单元格区域中的数据,公式,注释以及格式。

如果你使用ClearRange方法,并将dataOnly参数设置为true,该方法会清除公式,单元格注释,以及该区域单元格中的文本; 换句话说,它会清除数据模型中与这些单元格相关的所有信息。

你可以使用range接口中的IRangeSupport.Clear方法来删除一个单元格区域的内容。

Spread for Windows Forms 5.0 中文版下载地址

附:Spread for Windows Forms高级主题系列文章

Spread for Windows Forms高级主题(1)---底层模型

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

Spread for Windows Forms高级主题(3)---理解单元格的编辑模式

Spread for Windows Forms高级主题(4)---自定义用户交互

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏向治洪

React Native组件只Image

不管在Android还是在ios原生的开发中,图片都是作为控件给出来的,在RN中也有这么一个控件(Image)。根据官网的资料,图片分为本地静态图片,网络图片和...

25870
来自专栏Petrichor的专栏

Jupyter

When attempt to download .ipynb file as .python file:

73430
来自专栏优启梦

使用:before选择器给你的Logo添加扫光特效

在知更鸟大神的网站看到他的Begin主题Logo有扫光特效,看起来还是比较炫的。研究了一下,发现是用:before选择器实现的扫光效果,现在把代码甩出来,觉得好...

42160
来自专栏个人随笔

使用ListView控件展示数据

属性名称    说明 items   指定显示那种视图 View   指定显示那种视图 largelmagelist  大图标图像的imagelist控件 Sm...

31070
来自专栏HTML5学堂

GIF图像转换为多张JPG

HTML5学堂:在JS效果中,有一个使用代码处理多张连续的JPG图像,显示为动态GIF图的效果。于是乎,自己不得不制作多个连续的JPG图片。既然要做素材,也就顺...

30040
来自专栏优启梦

PHP头像九宫格合并 案例

唔,有一些东西需要随机头像! 比如一些聊天网站需要随机展现头像! 9宫格的平铺头像! 每次都会展现不一样的头像! 效果: ? 案例如下: <?php /** ...

676130
来自专栏韦弦的偶尔分享

微信小程序带图片弹窗简单实现

(PS:最近发现一个问题,如果页面内有textarea时,textarea的层级会比蒙版视图高,并且无法修改,做了一个比较笨的解决方案:小程序textarea层...

1.8K20
来自专栏Django中文社区

标签云

我们博客的文章(Post)模型除了通过 ForeignKey 关联了 Category(分类)外,还通过 ManyToMany 关联了 Tag(标签)。在我们的...

38280
来自专栏python3

tkinter -- Grid

实现机制是将 Widget 逻辑上分割成表格,在 指定的位置放置想要的 Widget 就可以了

10730
来自专栏Micro_awake web

HTML5语义化元素

语义化元素:有意义的元素。 对语义化的理解: 正确的标签做正确的事情; HTML5语义化元素让页面内容结构化清晰; 便于开发人员阅读,理解,维护; 搜索引擎爬虫...

26350

扫码关注云+社区

领取腾讯云代金券