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)---自定义用户交互
相关阅读:
Spread for Windows Forms 7新功能使用指南