




已阅读5页,还剩14页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
SourceGrid 3简介 SourceGrid 是 Windows 窗体的一个控件,完全由C#语言写成的. 目的是制作一个简单而灵活的表格控件以方便显示数据,并可以显示一系列格式化的数据。 现在有大量像这类可用来使用的控件,但是大部分都需要购买,而且难于用户化,或和.net不兼容或是以DataSet为导向的。 本文对SourceGrid 控件的使用和功能做了一下概括,关于SourceGrid 的所有类、属性和方法的细节请参照CHM的文档或存在于压缩文件的project例子,如果有问题、想法或问题给我发邮件,发到获得SourceGridSourceGrid 是由 DevAge Source Pack构成的,可以在 DevAge Source Pack page下载。基本概念控件 在DevAge里主要有两个控件。SourceGrid3.dll 能插入到Visual Studio的工具栏中,并能在任何.NET 窗体中使用: GridVirtual -虚表格单元的表格类 (ICellVirtual). Grid - 实体表格单元的表格类 (ICell). 之所以有两个截然不同的基础类:虚表格和实体表格。虚表格是它的表格单元是用来定义显示的外观和单元的行为而不包含数据值。实体表格有虚表格单元类的相同的属性,且包含每个单元对应的值,特别是每个单元和表格的特定位置对应。每个单元是由基于修正的 模型-视图-控制器-编辑器 四个基础模块构成: Model : 模型是用来管理每个单元的值的类。它包含值或值和它的属性关联,用来同其他的控件交互。 View : 视图是用来绘制单元和显示单元的格式化的数据。 Controller : 控制器是提供单元行为的类。 Editor : 编辑器是用来定制编辑单元的类。这样的模块细分使得代码的编写有了伸缩性,提高了代码的重复利用,节省了时间和提供了所有类型定制的固定的基础。 对于更多相同的案例就有了已经实现和配置好了的一些类事例,但要编写或修改少许代码来实现自己订制的单元(要想了解细节请看下文)。Rows and Columnsgrid 主要的组成部分是行和列。为了巧妙地处理数据信息,SourceGrid 提供了两个属性: Rows - 管理SourceGrid 所有行的信息,基类是RowsBase 。 Columns - 管理SourceGrid 所有列的信息,基类是ColumnsBase 。每当使用实体表格时,就是使用类RowInfoCollection 和类ColumnInfoCollection 继承了基类来实现的。每当使用虚表格时,就必须继承基类、并用定制代码的方式来提供数据源的信息。巧妙地处理实体表格的行和列注意: Only valid for real grid.下面是一些RowInfo 类的属性: Height, Top, Bottom, Index, Tag. 而这些是ColumnInfo 类的一些属性:Width, Left, Right, Index, Tag.有很多的方式创建行和列: grid1.Redim(2,2); grid1.RowsCount = 2; grid1.ColumnsCount = 2; grid1.Rows.Insert(0); grid1.Rows.Insert(1); grid1.Columns.Insert(0); grid1.Columns.Insert(1);这三个例子用不同的方法创建了相同的两行两列的表格。要改变行或列的宽度或高度可以实用以下代码来实现:grid1.Rows0.Height = 100;grid1.Columns0.Width = 100;属性Top, Bottom, Left 和 Right 的值是利用行和列的宽和高自动计算出来的。计算出行和列,必须为每个表格单元元素创建对应的位置,像下面的代码:grid1.Redim(2,2);grid10, 0 = new SourceGrid3.Cells.Real.Cell(Cell 0, 0);grid11, 0 = new SourceGrid3.Cells.Real.Cell(Cell 1, 0);grid10, 1 = new SourceGrid3.Cells.Real.Cell(Cell 0, 1);grid11, 1 = new SourceGrid3.Cells.Real.Cell(Cell 1, 1);模型命名空间: SourceGrid3.Cells.ModelsModel 类是用来把数据按单元分离到每个表格单元中,这样有有两个主要原因: 为了实现数据仅存储于原始数据源中的虚表格,在这种情况下,如果Model类实现的正确,就可以直接从数据源中读取数据。 为了继承cells类但又要维持一个容易使用的代码。没有必要改变Cell基类来添加新的特性,但可以简单的加一个新的Model类来添加新的特性。 每个单元类cell都有一个Model属性来获取和设置一个ModelContainer 类对象实例。ModelContainer 这个类是一个集合,集合元素是IModel 类型的,每个IModel 类型的元素包含所有用来实现新特性的属性。主要的Model 是存有单元cell数据值的ValueModel,但也可以存在别的Model 和你创建的订制的Model 。下面是一些Cell默认的Model: IValueModel IToolTipText ICheckBox IContextMenu ISortableHeader 上面这些Model 中每个Model 都包含各自的特性的特殊的属性,例如:IToolTipText 包含提示字符串属性ToolTipText 。每个单元cell 都有一个的model集合,用这个集合可以在单一的单元中实行多个特性。通常使用实体单元,使用一个简单地实现接口的model直接存取所需数据;使用虚单元,可以通过实现接口来和外部数据源直接绑定。 视图命名空间: SourceGrid3.Cells.Views每个单元都有一个IView接口类型的可以设置和获取View 的属性。单元用这个属性来绘制和定制单元的外观。View 类的目的是把绘制外观代码和静止不变的代码分离,在表格单元中共享相同的外观属性。事实上,相同的外观类实例能同时用在很多单元中,从而使系统资源的使用最优。下面是些常用的类,命名空间是SourceGrid3.Cells.Views: SourceGrid3.Cells.Views.Cell - 用于典型的表格单元,使用这个视图可以定制颜色,字体,边框和很多别的属性。 SourceGrid3.Cells.Views.Button - 用于使用按钮类型的表格单元,支持使用主题。 SourceGrid3.Cells.Views.Link - 用于使用超连接类型的表格单元。 SourceGrid3.Cells.Views.CheckBox* - 用于使用复选框类型的表格单元。这个复选框可以被选,取消选择并可以包含文本。 SourceGrid3.Cells.Views.Header* - 用于一般的表头单元。 SourceGrid3.Cells.Views.ColumnHeader* - 用于列的头单元,支持使用主题。 SourceGrid3.Cells.Views.RowHeader - 用于行的头单元,支持使用主题。 SourceGrid3.Cells.Views.MultiImages - 允许在一个单元中显示一个或多个图像。 用“*“标记的 View 需要一个特殊的控件才能可以使用,例如,CheckBox 需要ICheckBox 模型。上面的一些类中有些类包含一个或多个静态属性,静态属性是方便使用的类实例。这段代码是创建新的视图类,设置一些属性和把它分配给更多先前创建的单元中:SourceGrid3.Cells.Views.Cell view = new SourceGrid3.Cells.Views.Cell();view.BackColor = Color.Khaki;grid10,0.View = view;grid12,0.View = view;用几行的代码你可以创建自己定制的外观View,要自己订制单元的外观我建议从Cell继承或直接使用Cell,因为Cell已经实现了一些默认的方法。在下面的代码事例中,创建了一个绘制红颜色的椭圆形的外观View ,并在单元中使用了这个外观:public class MyView : SourceGrid3.Cells.Views.Cellprotected override void DrawCell_Background(SourceGrid3.Cells.ICellVirtual p_Cell, SourceGrid3.Position p_CellPosition, PaintEventArgs e, Rectangle p_ClientRectangle)base.DrawCell_Background (p_Cell, p_CellPosition, e, p_ClientRectangle);e.Graphics.DrawEllipse(Pens.Red, p_ClientRectangle);在单元中使用新的外观View 可用下面代码来实现:MyView myView = new MyView();/. code to populate the gridgrid1r, c.View = myView;控制器命名空间: SourceGrid3.Cells.Controllers每个单元都有一个可是设置和获得ControllerContainer 对象实例的Controller 属性。Controller 这个类是一个IController 接口类型的集合。每个IController 接口能用来实现单元的行为通过使用一些事件,例如Click, MouseDown, KeyPress, .下面是些常用的类: SourceGrid3.Cells.Controllers.Cell - 一般行为的单元。 SourceGrid3.Cells.Controllers.Button - 有按钮行为单元。 SourceGrid3.Cells.Controllers.CheckBox* - 有复选框行为的单元(需要ICheckBox Model)。 SourceGrid3.Cells.Controllers.ColumnFocus - 当鼠标单击列的标头时,把焦点设置到该列。 SourceGrid3.Cells.Controllers.ColumnSelector - 当鼠标单击列的标头时,用来选择这列。 SourceGrid3.Cells.Controllers.ContextMenu* - 用来在单元上绑定一个快捷菜单 (需要 IContextMenu Model) SourceGrid3.Cells.Controllers.CustomEvents - 揭示一个可以使用的事件列表,不用创建一个新的控制器Controller。 SourceGrid3.Cells.Controllers.FullColumnSelection - 用来使列选择模型可用。 SourceGrid3.Cells.Controllers.FullRowSelection - 用来使行选择模型可用。 SourceGrid3.Cells.Controllers.MouseCursor - 用来设置当鼠标在单元上时鼠标显示的样式。 SourceGrid3.Cells.Controllers.MouseInvalidate - 当被选单元收到鼠标事件时,用来使单元无效。 SourceGrid3.Cells.Controllers.Resizable - 用来创建可调整大小的单元,宽和长。 SourceGrid3.Cells.Controllers.RowFocus - 当鼠标单击行的标头时,用来设置行的焦点。 SourceGrid3.Cells.Controllers.RowSelector - 当鼠标点击行的标头时,用来设置选择的行。. SourceGrid3.Cells.Controllers.SortableHeader* - 用来创建可排序的标头单元。 (需要 ISortableHeader Model) SourceGrid3.Cells.Controllers.ToolTipText* - 用来创建带有提示字符串的单元。 (需要 IToolTipText Model) SourceGrid3.Cells.Controllers.Unselectable - 用来创建不能选择的单元。 *The Controller marked with an asterisk need special models to complete their tasks.上面的一些类中有些类包含一个或多个静态属性,静态属性是方便使用的类实例。用几行的代码你可以创建自己定制的Controller,要自己订制单元的Controller我建议从ControllerBase继承或直接使用ControllerBase,因为ControllerBase已经实现了一些默认的方法。在下面的代码事例中,创建了一个Controller。每当用户把鼠标经过设置了Controller 的表格单元上时,这个表格单元就改变它的背景颜色:public class MyController : SourceGrid3.Cells.Controllers.ControllerBaseprivate SourceGrid3.Cells.Views.Cell MouseEnterView = new SourceGrid3.Cells.Views.Cell();private SourceGrid3.Cells.Views.Cell MouseLeaveView = new SourceGrid3.Cells.Views.Cell();public MyController()MouseEnterView.BackColor = Color.Green;public override void OnMouseEnter(SourceGrid3.CellContext sender, EventArgs e)base.OnMouseEnter (sender, e);sender.Cell.View = MouseEnterView;public override void OnMouseLeave(SourceGrid3.CellContext sender, EventArgs e)base.OnMouseLeave (sender, e);sender.Cell.View = MouseLeaveView;在单元中使用新的 Controller 用下面的代码实现:MyController myController = new MyController();/. code to populate the gridgrid1r, c.AddController(myController);Editor命名空间: SourceGrid3.Cells.Editors每个表格单元有个Editor 属性,用来设置和取得一个EditorBase 的对象实例。这个类用来提供表格单元的编辑。如果这个属性是null,这个表格单元就是不可编辑的。通常Editor 用Model 类来管理必要的转换,显著的是字符串的转换(用来描述单元的值信息)。.下面是些常用的类: ComboBox - 下拉框编辑器。 DateTimePicker - 日期选择编辑器。 NumericUpDown - 数字编辑器。 TextBox - 文本框编辑器。这是一个可用于所有类型的编辑器,并且支持字符串和其他类型的转换(string, int, double, enum,.) TextBoxCurrency - 文本编辑器,专门用于数值型的货币值编辑。 TextBoxNumeric - 文本编辑器,专门用于数值的编辑。 TimePicker - 日期选择编辑器,专用于时间的编辑。 TextBoxUITypeEditor - 支持所有UITypeEditor的类型的编辑。这是一个非常有用的类,因为有很多类型都支持这个类:DateTime, Font, enums等,你还可以创建自己的UITypeEditor。 一个Editor 可以用于相同表格的多个单元共享;例如,可以在表格的一列的所有单元都用相同的Editor ,但是总是用于相同的表格中。每个Editor 都有一个Control 属性,它返回一个Windows窗口的控件来提供表格的编辑的对象实例。你可以用这个对象实例来订制编辑控件以实现特殊的编辑效果。下面是一些创建可编辑的表格单元的方法: 创建一个特殊值类型的表格单元。用这种方法表格单元自动地调用有用的功能,Utilities.CreateEditor 返回一个有效的Editor 来实现特殊类型的值或是空值(null)。 /String cell grid10, 0 = new SourceGrid3.Cells.Real.Cell(Hello, typeof(string); /Double cellgrid10, 1 = new SourceGrid3.Cells.Real.Cell(0.7, typeof(double); 分别创建Editor 并把它分配给表格单元: /String editor SourceGrid3.Cells.Editors.IEditor editorString = SourceGrid3.Utilities.CreateEditor(typeof(string); /Double editor SourceGrid3.Cells.Editors.IEditor editorDouble = SourceGrid3.Utilities.CreateEditor(typeof(double); /String cell grid10, 0 = new SourceGrid3.Cells.Real.Cell(Hello); grid10, 0.Editor = editorString; /Double cell grid10, 1 = new SourceGrid3.Cells.Real.Cell(0.7);grid10, 1.Editor = editorDouble;当你想在多个表格单元Cell中用相同的editor ,推荐使用这个方法。 手动创建一个恰当的editor ,并把它分配给表格单元cells: SourceGrid3.Cells.Editors.TextBox txtBox = new SourceGrid3.Cells.Editors.TextBox(typeof(string);grid12,0.Editor = txtBox;如果你需要一个多功能编辑的大型控件或者有特殊的需要,建议你手动的创建editor。在这种情况下,例如,下面是我手动创建的EditorTextBox 类,并设置它的属性MaxLength。/String editorSourceGrid3.Cells.Editors.TextBox editorString = new SourceGrid3.Cells.Editors.TextBox(typeof(string);editorString.Control.MaxLength = 10;/String cellgrid10, 0 = new SourceGrid3.Cells.Real.Cell(Hello);grid10, 0.Editor = editorString;这个editor 还可以定制表格单元的编辑格式。例如下面的代码,创建了一个被定制为数值格式的表格单元:/Double editorSourceGrid3.Cells.Editors.TextBoxNumeric editorDouble = new SourceGrid3.Cells.Editors.TextBoxNumeric(typeof(double);editorDouble.TypeConverter = new DevAge.ComponentModel.Converter.NumberTypeConverter(typeof(double), #,#.00);/String cellgrid10, 0 = new SourceGrid3.Cells.Real.Cell(9419.3894);grid10, 0.Editor = editorDouble;使用了TypeConverter 属性来定制实现其他类型和字符串类型的转换。下面还有很多其他的TypeConverter 可以使用: DevAge.ComponentModel.Converter.NumberTypeConverter - - 用于数值类型,如double, decimal, int, float 。 DevAge.ComponentModel.Converter.PercentTypeConverter - 用于数值类型,如double, decimal and float,使用百分比格式。 DevAge.ComponentModel.Converter.CurrencyTypeConverter - 用于Decimal 和double 类型,使用货币格式。 DevAge.ComponentModel.Converter.DateTimeTypeConverter - 用于日期类型。 下面的图片演示了可以使用的大部分editors 和一些特殊的表格单元:(例3的图片):创建一个利用定制控件或少许代码来实现特殊行为的定制的Editor 是可以实现的。你可以从EditorControlBase 继承来得到自定义的的类,创建任何Windows 窗口控件。下面是个的editor 例子,用DateTimePicker 控件来说明:public class DateTimePicker : EditorControlBasepublic DateTimePicker():base(typeof(System.DateTime)protected override Control CreateControl()System.Windows.Forms.DateTimePicker l_dtPicker = new System.Windows.Forms.DateTimePicker();l_dtPicker.Format = DateTimePickerFormat.Short;return l_dtPicker;public new System.Windows.Forms.DateTimePicker Controlgetreturn (System.Windows.Forms.DateTimePicker)base.Control;public override void SetEditValue(object editValue)if (editValue is DateTime)Control.Value = (DateTime)editValue;else if (editValue = null)Control.Value = DateTime.Now;elsethrow new SourceGridException(Invalid edit value, expected DateTime);public override object GetEditedValue()return Control.Value;Advanced cells命名空间: SourceGrid2.Cells下面是些常用的cells 类: SourceGrid3.Cells.Virtual - 这个命名空间包含所有的实体单元,可被用于GridVirtual 控件。o CellVirtual - 基本的单元,用于所有其他的执行。用于最普通的虚单元类型。 o Header - 表头单元。 o ColumnHeader - 列的标头单元。 o RowHeader - 行的标头单元。 o Button - 按钮单元。o CheckBox - 复选框单元。 o ComboBox - 下拉框单元。 o Link - 超连接单元。. o Image - 图像单元. SourceGrid3.Cells.Real - 这个命名空间包含所有的实体单元,可被用于Grid 控件。 o Cell - 基本的单元,用于所有其他的执行。用于最普通的实体单元类型。 o Header - 表头单元。 o ColumnHeader - 列的标头单元。 o RowHeader - 行的标头单元。 o Button - 按钮单元。 o CheckBox - 复选框单元。 o ComboBox - 下拉框单元。 o Link - 超连接单元。 o Image - 图像单元。 这个类的目标是简化视图View,模型 Model,控制器 Controller and编辑器Editor类的使用。如果我们看一下任何表格单元类的代码,我们可以看到这些类根据它们在表格单元的角色来应用这些组件。这是一个表格单元的代码例子: SourceGrid3.Cells.Real.CheckBox:public class CheckBox : Cellpublic CheckBox(string caption, bool checkValue):base(checkValue)if (caption != null & caption.Length 0)View = Views.CheckBox.MiddleLeftAlign;elseView = Views.CheckBox.Default;Model.AddModel(new Models.CheckBox();AddController(Controllers.CheckBox.Default);AddController(Controllers.MouseInvalidate.Default);Editor = new Editors.EditorBase(typeof(bool);Caption = caption;private Models.CheckBox CheckBoxModelgetreturn (Models.CheckBox)Model.FindModel(typeof(Models.CheckBox);public bool Checkedgetreturn CheckBoxModel.GetCheckBoxStatus(this, Range.Start).Checked;setCheckBoxModel.SetCheckedValue(this, Range.Start, value);public string Captiongetreturn CheckBoxModel.Caption;setCheckBoxModel.Caption = value;焦点和选择(Focus and Selection)一个表格单元能被选择或是获得焦点。只有一个表格单元能拥有焦点,那个表格单元拥有焦点由表格的属性Grid.Selection.ActivePosition识别,但可以选择很多的表格单元。当表格的Selection 对象里存储了表格单元,这个表格单元就是被选择的了。拥有焦点的表格单元可以接受所有鼠标和键盘的事件,同时被选的表格单元可以收到动作指令,例如拷贝,粘贴,清除。要是想为一个特定的表格单元设定焦点可以使用Grid.Selection.Focus(Position pos)方法,这个方法的参数输入要设置焦点的表格单元的位置,就可以使该位置的表格单元获得焦点,用Position.Empty 作方法的参数就可以为表格单元移去焦点。要想列出所有被选的表格单元你可以使用Grid.Selection.GetCellsPositions()方法,它返回所有选择表格单元的位置,或是check 如果一个特殊的表格单元被选择可以使用Contains 方法。你可以定制很多种被选择的外观,使用下面这些属性:Grid.Selection.BackColor, Grid.Selection.Border, Grid.Selection.BorderMode, Grid.Selection.FocusBackColor and Grid.Selection.MaskStyle.你还可以使用下面这些事件来响应用户特殊的操作动作。 Grid.Selection.FocusRowEntered, Grid.Selection.FocusRowLeaving, Grid.Selection.FocusColumnEntered, Grid.Selection.FocusColumnLeaving, Grid.Selection.CellLostFocus, Grid.Selection.CellGotFocus, .位置和范围(Position and Range)在SourceGrid 工程中使用频率最高的两个对象是表格的位置对象Position 和表格的范围对象Range。表格位置对象应用一组行和列来确定表格单元的位置,而表格的范围对象从开始位置对象识别到结束位置对象。使用SourceGrid(Using SourceGrid)如果你想用SourceGrid ,必须下载DevAgeSourcePack 包,把它解压后,把下面这些配件引用到你的.net工程中: DevAge.SourceGrid3.dll - 包含主要控件和类。 DevAge.Core.dll - 需要引用的集合。 DevAge.Drawing.dll - 需要引用的集合。 DevAge.Windows.Forms.dll - 需要引用的集合。 DevAge.WindowsPlatform.dll - 可选的引用集合,用于提供主题支持。 GridGrid控件是理想的,如果你想要最好的弹性和简易性,而且它没有很多的表格单元。事实上,这个控件的每个单元都是由.net类描述的,这也是之所以占用了有限的资源。此外,这个控件支持行单元合并和列单元合并(RowSpan 和ColumnSpan )。在Windows 窗体中使用这个控件是简单的。 就像添加一个别的控件一样,如Button 和DataGrid。首先,创建或者打开一个Windows 应用工程,然后打开一个可设计的Windows窗体。现在你开始定制工具箱,用鼠标右健单击工具箱,在.NET Framework 控件框中单击浏览按钮,找到并选择DevAge.SourceGrid3.dll,这样这个控件现在就被添加到工具箱中了,然后就可以被添加到Windows 窗体和其他控件一样使用它了。 把控件添加到窗体后,我们可以使用表格来写代码了。例如,我们可以在窗体的Load 事件中写这些代码:grid1.Redim(2, 2);grid10,0 = new SourceGrid3.Cells.Real.Cell(Hello from Cell 0,0);grid11,0 = new SourceGrid3.Cells.Real.Cell(Hello from Cell 1,0);grid10,1 = new SourceGrid3.Cells.Real.Cell(Hello from Cell 0,1);grid11,1 = new SourceGrid3.Cells.Real.Cell(Hello from Cell 1,1);上面的代码建立了一个两行两列的表格,定位了每个表格单元的位置。我已经用到了包含实表格单元定义的命名空间SourceGrid3.Cells.Real。现在我们创建一个完整的表格,有表头,自动排序,可用鼠标调整列的大小,使用文本框和日期编辑框的和复选框编辑表格单元。grid1.BorderStyle = BorderStyle.FixedSingle;grid1.ColumnsCount = 3;/grid1.FixedRows = 1;grid1.Rows.Insert(0);grid10,0 = new SourceGrid3.Cells.Real.ColumnHeader(String);grid10,1 = new SourceGrid3.Cells.Real.ColumnHeader(DateTime);grid10,2 = new SourceGrid3.Cells.Real.ColumnHeader(CheckBox);for (int r = 1; r 10; r+)grid1.Rows.Insert(r);grid1r,0 = new SourceGrid3.Cells.Real.Cell(Hello + r.ToString(), typeof(string);grid1r,1 = new SourceGrid3.Cells.Real.Cell(DateTime.Today, typeof(DateTime);grid1r,2 = new SourceGrid3.Cells.Real.CheckBox(null, true);grid1.AutoSize();上面代码中我设置了表格的边框,列数,固定的行数和创建了一个表头。在表头中我使用了表头单元类ColumnHeader 的实例对象。用简单的循环创建了每列对应数据类型的表格单元。表格单元类自动的建立了适合各列数据类型的编辑器。(如TextBox 和DateTimePicker)。最后那列我使用了复选框CheckBox 单元,它可以直接在表格单元中显示。这个窗体看起来像下面图片的一个,这个例子现在也例子工程SampleProject 中,SampleProject 在ZIP 文件里。如果要读取表格特殊的值,你可以用cell 的value 属性。如: object val = grid11,0.Value;.虚表格(GridVirtual)GridVirtual 控件是理想的,当必须要显示大量的数据和你已经有了可利用的数据结构,像DataSet,Array ,XML数据文件或是其他数据结构。这种类型的表格都有着相同的特色,除了自动排序(这是因为表格没有拷贝外部的数据结构的数据值从而不能自动地对其排序)和行合并和列合并的特性,就是允许一个表各单元和其邻近的单元合为一个单元。另一个缺点是创建一个虚表格比较难。虚表格的主要观念是表格单元不包含数据值信息,而是用外部的数据结构进行读写,表格不知道行数和列数但可以直接的、正常的从数据源进行数据读写。这个思想是由虚表格GridVirtual 类和虚方法 CreateRowsObject,CreateColumnsObject 和GetCell来实现的。然后你可以用特殊的IValueModel 接口来直接的从数据源中读取数据值。为了使用虚表格GridVirtual 就必须创建一个类,继承GridVirtual 并要实现对数据源数据的读取,还要重写CreateRowsObject, CreateColumnsObject 和GetCell 方法。方法GetCell 的目的是为了实现返回一个指定位置(用行和列)的被选择了的表格单元功能,方法CreateRowsObject 和CreateColumnsObject 用来为数据源创建行和列实例对象。这样就有了很大的灵活性,因为你可以返回实现ICellVirtual 的特殊数据类型的表格单元;例如,当在0行时,你可以返回一个表头类型的表格单元;通常你不必直接使用GridVirtual ,而是用一个从它派生的控件。到现在为止,我已经实现了两个直接使用、有着虚表格特性的控件。 DataGrid - 和数据视图对象绑定的表格,即表格的数据源是数据视图对象。 ArrayGrid - 和数组对象绑定的表格,即表格的数据源是数组对象。 如果你想创建你的定制控件从特别的数据源读取数据,你可以拿ArrayGrid 作为一个例子。建议(Suggestions)通常使用SourceGrid 要用代码来完成所有的功能,因此一条重要的建议是封装代码,使用代码重用的方式。下面是一些技巧:如果你需要定制一些表格单元的外观,我常常建议创建一个新的类,在新类中写定制的代码。用这种方式,你可以在所有你的应用程序和窗体中重用你创建的类。假设你想创建所有的以灰色为背景色的表格,你可能这样写这个新类:public class GrayView : SourceGrid3.Cells.Views.Cellpublic new static readonly GrayView Default = new GrayView();public GrayView()BackColor = Color.LightGray;public class GrayCell : SourceGrid3.Cells.Real.Cellpublic GrayCell(object val):base(val)View = GrayView.Default;用这中方法可以定制任何样式的表格外观,例如,你可以创建一个新的控制器Controller 应用于你的表格单元中。另一个重要的特色是:我们从上面的代码可以看到,我创建了一个存储了视图对象的静态的变量类级属性。用这种方法可以在很多表格单元中共享相同的对象实例,使系统资源最优化。另外还有一个小建议是关于使用命名空间的。很多SourceGrid 类和一些系统级类有着相同的名字。例如,CheckBox 表格单元和System.Windows.Forms命名空间的CheckBox 控件,因此,有时使用标准的using 语句很难。如果你不愿意使用长的命名空间或想使代码可读性好,我建议在using 语句中用重命名命名空间的方法。像下面的例子,你可以用下面的代码替换上面代码:SourceGrid3.Cells.Real.Button bt = new SourceGrid3.Cells.Real.Button();用下替换:using Cells = SourceGrid3.Cells.Real;.Cells.Button bt = new Cells.Button();扩展(Extensions)数据表格(DataGrid)SourceGrid3.DataGrid 是个继承于GridVirtual 类
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高中化学说课课件教学
- 高中化学冶金课件
- 2025学年四川省高三语文秋季入学摸底考试卷附答案解析
- 半导体行业市场前景及投资研究报告:走向更高端国产掩膜版厂商2.0时代
- 高一化学钠课件
- 砂石场物流管理人员劳动合同及供应链管理协议
- 景观园林住宅区物业合同终止及园林景观维护协议
- 体育休闲公园空地租赁及赛事运营管理合同
- 离婚协议书范本:共同债务处理明确责任归属
- 离婚协议补充及财产分割执行及子女抚养权变更委托书
- DB13-T 6095-2025 水利工程施工图设计文件编制规程
- (2025)中小学“学宪法、讲宪法”知识竞赛题库(含答案)
- 非公企业党建培训课件
- 2025年中国PC工业计算机(工控机)数据监测研究报告
- 玉米收获机械技术课件
- 大学英语写作教学课件
- 国家安全生产法2025
- 2025年中航油招聘笔试参考题库附带答案详解
- DB54∕T 0275-2023 民用建筑节能技术标准
- 班级小法庭培训课件
- 电销公司风控管理制度
评论
0/150
提交评论