Spread for Windows Forms高级主题(6)---数据绑定管理

自定义列和区域的数据绑定

当表单被绑定到一个数据集时,表单中的列就会相继的被分配到数据集的区域上。例如,第一个数据域分配给列A,第二个数据区域分配给列B,等等。你也可以改变分配顺序,将任意域分配给任意列。

默认情况下,绑定的表单继承数据库中列的宽度。如果你想要设置你自己的列宽,你可以在绑定Spread控件之后设置列宽,或者将DataAutoSizeColumns属性设置为false并设置列宽。

如果你将多个Spread控件绑定到了一个单一的数据集,你可以将每一个Spread控件中表单的AutoGenerateColumns属性设置为false,这样Spread控件就不会绑定所有的列。这时你就可以将任意一个Spread控件中的列的DataField属性设置为某一个数据集中的域的名字。这样只有数据集中该列的数据被绑定了这个Spread控件。

以下示例代码把Spread控件绑定到一个数据集,并设置在前四列中使用数据区域。

// Turn off automatic column and field mapping.

fpSpread1.Sheets[0].AutoGenerateColumns = false;

// Bind the component to the data set.

fpSpread1.DataSource = dataSet1;

// Set the fields for the columns.

fpSpread1.Sheets[0].Columns[0].DataField = "Description";

fpSpread1.Sheets[0].Columns[1].DataField = "ID";

fpSpread1.Sheets[0].Columns[2].DataField = "LeadTime";

fpSpread1.Sheets[0].Columns[3].DataField = "Price";

添加行或列到已绑定的表单

把未绑定的行添加到已绑定的表单中

当你将表单绑定到一个数据集时,你可能想要添加一个未绑定的行保存一些额外的数据。

下面的图表中展示了某个Spread控件中的一个表单,它的数据来自一个数据集;表单的底端有一行未绑定的行,计算表单中数据的平均值。

下面的示例代码把Spread控件绑定到了一个数据集,并添加了一个未绑定行:

// Bind the component to the data set.

fpSpread1.DataSource = dbDataSet;

// Add an unbound row.

fpSpread1.Sheets[0].AddUnboundRows(20, 1);

把一个未绑定列添加到一个绑定表单中

当你将表单绑定到一个数据集时,你可能想要添加一个未绑定的列保存一些额外的数据。

下面的图表中展示了某个Spread控件中的一个表单,它的数据来自一个数据集;表单的底端有一行未绑定的行,计算了表单中数据的平均值。

下面的示例代码把Spread控件绑定到一个数据集,并添加了一个未绑定列:

 

// Bind the component to the data set.

fpSpread1.DataSource = dbDataSet;

// Add an unbound row.

fpSpread1.Sheets[0].AddColumns(20, 1);

将Spread的单元格区域绑定到外部数据源

你可以将Spread控件中一定范围内的单元格绑定到外部的数据源上。为了达到这个目的,你可以使用SpreadDataBindingAdpater类在Spread控件和数据源之间创建一个连接,并使用MapperInfo类把单元格区域与数据源中的区域匹配起来。

绑定单元格区域之后,如果你在数据源中删除或增加了一列,Spread控件并不会自动进行更新。

Spread控件中的数据源和单元格区域是由MapperInfo类控制的。它们之间通过行同步进行相互同步。如果用户在单元格区域中添加或者删除了任意行,这将会影响到数据源中的数据,反之亦然。如果用户在现有的单元格区域下面添加了新的一行,那么单元格区域会扩展一行,并对MapperInfo类和数据源进行扩展,反之亦然。如果新添加的行位于绑定区域的外面,那么它不会被添加到绑定区域中。

默认情况下,Spread控件会尝试将外部数据源中的数据类型与它所包含的单元格类型进行匹配。你可以将DataAutoCellTypes属性设置为false来阻止以上的默认行为。下面的表格展示了我们所使用的基于数据类型的单元格类型:


数据类型


单元格类型


布尔值


复选单元格


日期时间


日期时间单元格


双精度浮点值,单精度浮点值,十进制值


数值单元格


16位整型,32位整型,等等。


数据单元格


字符串


文本单元格


其它


通用单元格

想要了解更多信息,请参考API参考资料中的SpreadDataBindingAdapter类以及MapperInfo类。

下面的示例代码将一个单一的单元格区域绑定到一个数据源上:

FarPoint.Win.Spread.Data.SpreadDataBindingAdapter data = new FarPoint.Win.Spread.Data.SpreadDataBindingAdapter(); 

data.DataSource = dt;

data.Spread = fpSpread1;

data.SheetName = "Sheet1";

data.MapperInfo = new FarPoint.Win.Spread.Data.MapperInfo(3, 2, 1, 1); 

data.FillSpreadDataByDataSource();

将Spread中的单元格区域作为外部控件的数据源

你可以将Spread控件中一定范围内的单元格绑定到外部的数据源上。为了达到这个目的,你可以使用SpreadDataBindingAdpater类在Spread控件和数据源之间创建一个连接,并使用MapperInfo类把单元格区域与数据源中的区域匹配起来。

绑定单元格区域之后,如果你在数据源中删除或增加了一列,Spread控件并不会自动进行更新。

Spread控件中的数据源和单元格区域是由MapperInfo类控制的。它们之间通过行同步进行相互同步。如果用户在单元格区域中添加或者删除了任意行,这将会影响到数据源中的数据,反之亦然。如果用户在现有的单元格区域下面添加了新的一行,那么单元格区域会扩展一行,并对MapperInfo类和数据源进行扩展,反之亦然。如果新添加的行位于绑定区域的外面,那么它不会被添加到绑定区域中。

默认情况下,Spread控件会尝试将外部数据源中的数据类型与它所包含的单元格类型进行匹配。你可以将DataAutoCellTypes属性设置为false来阻止以上的默认行为。下面的表格展示了我们所使用的基于数据类型的单元格类型:


数据类型


单元格类型


布尔值


复选单元格


日期时间


日期时间单元格


双精度浮点值,单精度浮点值,十进制值


数值单元格


16位整型,32位整型,等等。


数据单元格


字符串


文本单元格


其它


通用单元格

想要了解更多信息,请参考API参考资料中的SpreadDataBindingAdapter类以及MapperInfo类。

下面的示例代码将一个单一的单元格区域绑定到一个数据源上。

FarPoint.Win.Spread.Data.SpreadDataBindingAdapter data = new FarPoint.Win.Spread.Data.SpreadDataBindingAdapter(); 

data.DataSource = dt;

data.Spread = fpSpread1;

data.SheetName = "Sheet1";

data.MapperInfo = new FarPoint.Win.Spread.Data.MapperInfo(3, 2, 1, 1); 

data.FillSpreadDataByDataSource();

使用层次化的数据显示

表单能够以层次化的视图显示 与其相关的数据,如相关数据库中的数据。下面是一个使用层次化视图显示数据库中数据的示例,其中的数据库引用了指导手册中的数据库。用户可以通过点击展开和折叠图表(加号和减号标识)展开或者折叠层次组织的层级。

想要以层次化的方式显示数据,首先需要创建一个数据集用来保存相关的数据;然后定义数据之间的相互关系; 最后设置Spread控件,以你想要的方式显示数据。你可以自定义单元格类型,颜色,标题,以及子表单的其它方面的外观设置。

你可以绑定到一个层次化的集合上。

如果你要为表单设置皮肤,你必须把皮肤应用到父表单和所有的子表单上。

你可以设置层次结构的显示方式,Spread会将其当做父表单的子视图。使用SheetView类的属性,你可以获取更多有关子视图的信息。

  • ChildRelationCount
  • GetChildDataModel
  • GetChildRelation
  • GetChildSheets
  • GetChildView
  • GetChildVisible
  • ParentRelationName

当最终用户展开或者折叠子表单时,你能够捕捉到这个事件。想要了解更多信息,请参考 Expand 事件和ChildViewCreated事件。你可以使用GetRowExpandable和 SetRowExpandable方法决定行是否是展开的。

如果你需要设置子表单的属性,最好是在ChildWorkbookCreated事件中放置这些修改属性的代码。当创建一个新的子表单时,该事件就会被触发。ChildViewCreated事件是在子表单创建后被触发的,但子表单直到最后才被创建好,并且只有子表单在控件中可见时它会被创建(这样布局的计算才会更快)。

下面的示例代码将Spread控件绑定到一个级联集合上。

public class Score

{

private string classname;

private string grade;

public string ClassName

{

get { return classname; }

set { classname = value; }

}

public string Grade

{

get { return grade; }

set { grade = value; }

}

}

public class Student

{

private string name;

private string id;

private ArrayList score = new ArrayList();

public string Name

{

get { return name; }

set { name = value; }

}

public string Id

{

get { return id; }

set { id = value; }

}

public ArrayList Score

{

get { return score; }

}

}

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

{

ArrayList list = new ArrayList();

Student s = new Student();

s.Name = "John Smith";

s.Id = "100001";

Score sc = new Score();

sc.ClassName = "math";

sc.Grade = "A";

s.Score.Add(sc);

sc = new Score();

sc.ClassName = "English";

sc.Grade = "A";

s.Score.Add(sc);

list.Add(s);

s = new Student();

s.Name = "David Black";

s.Id = "100002";

sc = new Score();

sc.ClassName = "math";

sc.Grade = "B";

s.Score.Add(sc);

sc = new Score();

sc.ClassName = "English";

sc.Grade = "A";

s.Score.Add(sc);

list.Add(s);

fpSpread1_Sheet1.DataSource = list;

}

 

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高级主题(5)---数据处理

 

相关阅读:

Spread for Windows Forms 7新功能使用指南

Spread Studio 10.0v1 发布

SpreadJS 10.0v1 发布

 

时间: 2024-11-10 07:34:52

Spread for Windows Forms高级主题(6)---数据绑定管理的相关文章

Spread for Windows Forms高级主题(8)---通过暂停布局提高性能

一种改善控件性能的方法是,当需要对许多单元格进行变动时,可以先保持或挂起重画,直到所有的变动都完成时再进行.通过在对单元格修改和重算时保持重画(挂起布局),然后再恢复布局并重画所有单元格控件能够节省很多时间,并且仍然能为用户展现一个全新的界面. 布局对象 布局是一个对象,它保存了计算后的值(像单元格的宽度和高度,合并,以及视图),用来绘制控件的当前状态.这些值可能包括到底有多少视图,每一个视图左上方的单元格是什么,每一行及每一列有多大以及每一个视图有多少单元格是当前可见的,等等.使用布局对象的目

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

你可以从多方面自定义用户界面来自定义用户与Spread控件的交互方式.同时,你还可以自定义如何处理用户交互方式. 设置允许用户进行的操作 下面的列表总结了通过控件的数据区域,你可以授权用户进行的操作(或者限制用户进行的操作). 允许的用户功能 相关属性或方法 拖拽单元格数据 FpSpread.AllowDragDrop 属性 拖拽并填写单元格数据 FpSpread.AllowDragFill 属性 编辑单元格备注 SheetView.AllowNoteEdit 属性 输入公式 FpSpread.

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

理解单元格的编辑模式 通常情况下,当终端用户双击单元格时,编辑控件将允许用户在该单元格中输入内容.在一个单元格中编辑的能力被称为编辑模式.一些属性和方法可以用来自定义编辑模式的使用. 当一个单元格处于编辑模式时,活动单元格将显示一个I型光标,如下图所示.当该单元格不处于编辑模式时,活动单元格将显示一个焦点长方形,如下图所示. 处于编辑模式下的单元格 被选中但是并不处于编辑模式下的单元格 一个单元格将进入编辑模式(开启编辑模式),当: 用户在单元格中输入内容 用户双击单元格 EditMode属性设

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

使用表单的API处理数据 你可以将数据以有格式或无格式字符串或者数据对象的形式填充到单元格中.将数据填充到单元格的最好方式取决于你想添加字符串数据还是数据对象,以及你想添加数据到单一的单元格还是某个范围内的所有单元格. 举例来说,如果你使用的数据来自用户的文本框中,你可能想要添加由Spread控件解析的字符串数据.如果你想要添加多个值,并想要直接将它们添加到数据模型中,可以以对象的方式添加它们. 下表汇总了在表单级别添加数据的方法. 数据描述 单元格数目 方法名 具有格式的字符串(例如"$1,2

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

底层模型概述 Spread控件提供了很多模型,这些模型提供了自定义控件的基础架构.同时,这些模型作为底层模板,派生出了更多通用的快捷对象. 在不使用Spread的底层模型的情况下,你可以完成许多任务.通过使用Spread设计器或者快捷对象(如单元格.列和行)的属性,你可以在表单上实现许多改变.但是因为表单模型是所有快捷对象的基础,因此在通常情况下,使用表单模型要比使用快捷对象的速度要快.例如,在代码中使用快捷对象设置一个属性值: fpSpread1.Sheets[0].Cells[0, 0].V

Spread for Windows Forms快速入门(14)---文件操作

你可以将数据从Spread中存到几种不同类型的文件中或者可以在Spread中打开几种不同类型的数据文件.通过使用相应的代码,你可以将整个控件,某个特定的表单,或者某个特定单元格区域中的数据保存为几种不同的文件类型或者流.类似的,你可以允许用户对某几种文件类型进行文件操作. 保存到Excel文件 你可以使用ExcelSaveFlags枚举类型的UseOOXMLFormat选项,将数据保存到Excel格式文件(BIFF8 格式)或者Excel 2007 XML 格式(xlsx).默认的,当你保存为E

Spread for Windows Forms快速入门(10)---绑定到数据库

下面的教程将带你创建一个工程, 并将Spread控件绑定到一个数据库. 在这个教程中,主要的步骤为: 1. 将Spread添加到一个数据绑定工程中 2. 设置数据库连接 3. 指定要使用的数据 4. 创建数据集 5. 把Spread控件绑定到数据库 6. 通过改变单元格类型改善显示效果   将Spread添加到一个数据绑定工程中 打开一个新的Visual Studio.NET工程.将工程命名为databind.将工程中的窗体文件命名为binding.cs(或.vb). 将FpSpread控件添加

Spread for Windows Forms快速入门(5)---常用的单元格类型(下)

在上一篇,我们介绍了常用了文本类型单元格.除了文本型单元格外,Spread还支持如下13种图形单元格类型:组合框单元格.按钮单元格.复选框单元格.超链接单元格.进度条单元格.条码单元格.颜色选择器单元格.图片单元.列表框单元格.复合列组合框单元格.复合选项单元格.富文本单元格.滚动条单元格等.下面我们介绍前五种的基本用法. 组合框单元格ComboBoxCellType 你可以使用一个组合框单元格以显示一个可编辑的下拉列表,用户通过在显示的列表中进行选择完成对值的输入.你可以指定项目的列表是否包括

Spread for Windows Forms 7新功能使用指南

表格控件 Spread for WinForms 表格控件兼容Excel的强大功能,并将其嵌入到您的应用系统中.完备的Excel文档支持使得您可以在企业中分享和访问数据信息:内嵌的图表引擎和数据可视化支持让您更加轻松的为商务.工程以及科学应用系统中创建丰富高效的信息中心. 表格控件 Spread for WinForms 7 在此次发布的版本中对过滤功能做了增强.增强过滤功能提供了种类繁多的过滤条件,包括数值.日期.文本和颜色的自动过滤.您可以创建三种类型的过滤器:数据列表.格式或标准.这些过滤