SourceGrid 2.0_ 翻译(1)

SourceGrid 2.0<?xml:namespace prefix = o />

下载来源和二进 - 825 KbDownload Source and Binary - 825 Kb

下载文件编写 - 1.35 MBDownload Documentation - 1.35 MB

官方的 SourceGrid 网站Official SourceGrid Website

<?xml:namespace prefix = v />

l         介绍

l         使用 SourceGrid

1.         工程和配置

2.         SourceGridMini (精简版的。NET Framework支持)

3.         Controls

4.         Grid

5.         GridVirtual

l         VisualModel

l         DataModel

l         BehaviorModel

l         Cells(单元格)

l         Grid的结构

1.         列和行

2.         panels 面板

l         事件

l         ContextMenu(上下文菜单)

l         焦点和选择

l         位置和范围

l         性能

l         扩展

l         Screenshots(屏幕截图)

l         如何使用

l         功能

l         重新写您的 SourceGrid 代码

l         未来发展

l         已知的问题

l         早先的版本

l         历史

l         许可

介绍:

SourceGrid 是一个的完全地用C#开发的Windows窗体控件;我的目标是产生一个简单的但是灵活的(网格)grid,每当使改变一个表格式的一系列的数据时必需是可见的。(注:显示数据的需求)

有许多这系列的控件可以用, 但是时常是贵的(收注册费等), 很难符合客户需求,或者不是和.NET一致的(注:不受.NETframework支持)

微软公司 DataGrid 不容易根据客户的需求定制(相信和我一样很多人遇到同样的问题了),当他的数据源不是DataSet时通常显得比较复杂,难使用!

我想要谢谢 Chirs Beckett, Anthony Berglas, Wayne Tanner, Ernesto Perales, Vadim Katsman, Jeffery Bell, Gmonkey, cmwalolo, Kenedy, zeromus, Darko Damjanovic, John Pierre, Achim Schäfer, Michael Look, Elmü (http://kickme.to/elmue)  和帮我解决了编码,Bug和给我新的主意和提议的许多其他的人。

在此对我已经用产生 CHM 帮忙的 NDoc 的表示特别谢谢。

这个控件与微软公司的Microsoft Framework. NET 1.1一起编译。并且引用SourceLibrary.dll <?xml:namespace prefix = st1 />1.2.3.1, 这是个通常的功能集的一个小的库。 我在ZIP 文件里介绍了的这一个动态链接库, 但是最好下载来自位置 http:// www.devage.com/. 的整个源码和最近的版本dll;使用条件:Visual Studio .NET 2003  或其它兼容的开发环境。。

最新版的控件从 http:// www.devage.com/.下载

如果你有问题,可以给我发邮件:webmaster@devage.com

在这篇文章中我想要介绍SourceGrid的概观和其功能性。

因为关于类,特性或方法的细节你能以 CHM 的格式帮助文件里获取 或 ZIP 文件的示例工程。

使用 SourceGrid

工程和配置

在附上的文件中有 4个工程:

l         SourceGrid(SourceGrid2.dll)- .NET Framework下的主工程

l         SampleProject- .NET Framework下的示例工程

l         SourceGridMini(SourceGridMini.dll)-精简版类库下的SourceGrid(例如:PocketPC中使用该控件)

l         SampleProjectMini-精简版类库下的SourceGrid 示例

我已经建立 2 解决方案:

SourceGrid2.sln标准的版本Framework

SourceGrid2Mini.sln 精简版Framework

SourceGridMini 精简版Framework支持

SourceGridMini 是 SourceGrid 版本为精简结构。 这一个版本使用与正常的版本相同——除了由于一些条件下的代码不被支持 (即:精简版类库不支持)

例如: 一些鼠标事件 (MouseEnter , MouseLeave,.。.)

对于 SourceGridMini 仍然有许多工作要完成,我一定将图画最佳化方法并且进行必需的检查并且测试许多功能最终产生稳定的工作版本。

我已经以Microsoft Pocket PC 2003 Emulator作为测试平台。

当你最初打开一个解决方案的时候(即:示例解决方案),将有一个错误,找不到SourceLibraryMini.dll,这是个引用问题……

要解决这个问题,你所要做的是首先删除未找到的SourceLibraryMini.dll,接着找到SourceLibraryMini.dll的物理位置,再重新添加一次引用。

从现在开始文章涉及.NET Framework,但是大多数的代码和一些解释是针对精简版类库的,,未来我将会试着区别二个版本。

 
控件

SourceGrid2.dll有里面的 2 控件能在VS.NET的工具箱中被插入,且在任何窗体中被使用:

GridVirtual 一个虚拟单元格组成的网格

Grid - 一个真正的单元格组成网格.

因此那里是二个基本上清楚的物件: 虚拟表格和真实表格。

虚拟的表格是决定外表和单元格的行为但是不包含数值。

真正的表格有如同虚拟表格一般的特性但是也包含表格的数值, 而且因此被关联到到网格的一个特定的位置。

每个单元格由三个基本部份组成:

DataModel: DataModel 是处理单元格的数值的类。它将单元格的数值转换成一个字串使其可视化,产生单元格的编辑、验证插入的值等操作。

VisualModel: VisualModel绘制单元格的类,包含可视的属性

BehaviorModel : BehaviorModel 是提供单元格的行为的类。

这一个细分允许很棒的弹性代码的再可用性, 节省时间而且为每一用户定制的类型提供坚实的基础。。

通常的说,现在已经有一些类安排而且配置好, 你只需要使用很少的一些程序编码就有可能产生符合你要求的个人化的单元格。 (为明细见到下一个段落)

网格(Grid

如果你想要最好的弹性和简单性,网格(Grid)控件是最理想的除了没有许多单元格之外。事实上,在这控件中,每个单元格都被表现被一个类来表示,并且因此占领一个资源的特定量。 而且这是唯一的支持 RowSpan 和 ColumnSpan 的功能网格(Grid).(单元格合并)

在窗体中插入控件之后,我们就能马上开始写我们的使用网格(Grid)的编码了。

举例来说在窗体的加载事件中我们能写这样的代码:

grid1.Redim(2, 2);
grid1[0,0] = new SourceGrid2.Cells.Real.Cell("Hello from Cell 0,0");
grid1[1,0] = new SourceGrid2.Cells.Real.Cell("Hello from Cell 1,0");
grid1[0,1] = new SourceGrid2.Cells.Real.Cell("Hello from Cell 0,1");
grid1[1,1] = new SourceGrid2.Cells.Real.Cell("Hello from Cell 1,1");

第一行代码用 2个行和 2个列产生一个表而且用一个单元格放置在每个位置。 我已经使用 SourceGrid2.Cells.Real 名称空间,它包含了真正的单元格的定义。

每个单元格包含了所有的必需的显示属性

举例来说;包含改变单元格背景颜色:(由我们自定义)

SourceGrid2.Cells.Real.Cell l_Cell = new SourceGrid2.Cells.Real.Cell("Custom back color");
l_Cell.BackColor = Color.LightGreen;

这些是单元格的主要视觉特性:(对于一个整个的列表请教网格(Grid)的文档) :BackColor, ForeColor, Border, Font, TextAlignment, WordWrap ...,

现在我们试着创建整个的网格(Grid),有表头、自动排序、根据鼠标或者字符串调整列的宽度,并且有日期和一个选择框

grid1.BorderStyle = BorderStyle.FixedSingle;
grid1.ColumnsCount = 3;
grid1.FixedRows = 1;
grid1.Rows.Insert(0);
grid1[0,0] = new SourceGrid2.Cells.Real.ColumnHeader("String");
grid1[0,1] = new SourceGrid2.Cells.Real.ColumnHeader("DateTime");
grid1[0,2] = new SourceGrid2.Cells.Real.ColumnHeader("CheckBox");
for (int r = 1; r < 10; r++)
{
        grid1.Rows.Insert(r);
        grid1[r,0] = new SourceGrid2.Cells.Real.Cell("Hello " + r.ToString(), typeof(string));
        grid1[r,1] = new SourceGrid2.Cells.Real.Cell(DateTime.Today, typeof(DateTime));
        grid1[r,2] = new SourceGrid2.Cells.Real.CheckBox(true);
}
grid1.AutoSizeAll();

在前面的码中我已经设定了网格(Grid)边缘,列的数目,固定行的数目而且创造了第一个表头行。 对于表头我已经用一个 ColumnHeader 单元格。 藉由一个简单的循环我已经建立使用不同类型的每个列的其他单元格。单元格类别自动地为被指定。 ( 在这情况下即一个本文框和 DateTimePicker) 对于最后一个列我已经用一个在单元格中直接地允许勾选栏显示的勾选栏单元格。

窗体应该看起来像下列的截图那个一样。 这一个例子在 ZIP 文件的工程 SampleProject 中也是有的。

你可以使用这样的语句获取单元格的值:object val = grid1[1,0].Value;.

 

GridVirtual

当需要用许多地单元格将一些数据呈现出来的时候, GridVirtual 控件是理想的;通常你已经有可得的结构化的数据,像DataSet、一个数据组的数据,一个行列,一个XML文件或其他的数据结构。

网格(Grid)控件除了自动的排序 ( 这因为网格(Grid)没有拷贝不能够自动地排序任何的外部数据结构的内容) 单元格合并,允许生成的单元格跨越相邻的单元格

(汗:英语水平太烂,此处翻译感觉不行……)

另外的缺点是创造一个虚拟的网格(Grid)稍微更困难。

一个虚拟的网格(Grid)主要的观念是单元格不包含数值, 但是读写来自一个外部的数据结构的数值。 这一个思想和抽象的类别 CellVirtual 一起,它必需重新实现定义的方法 GetValue 和 SetValue 。

使用它因此是必需产生一个衍生于 CellVirtual 的类,并且自定义读取数据源的数据;

它也通常是比较好产生于 GridVirtual ,而且为了要有比较棒的弹性和较多的固定代码 , 重载方法 GetCell 的控件。

如果你偏爱你能直接地使用 GridVirtual 控件并且使用事件 GettingCell 。 方法 GetCell 的目的或事件 GettingCell 对于一个给定的位置 (列和栏) 是返回被选择的单元格。 因为你能为一个特定的类型返回任何的 ICellVirtual ,所以这允许很棒的弹性;

当列是 0 的时候,举例来说你可以返回一个类型表头的单元格。

在下列的例子中我已经建立一个读写由数组存储数值的虚拟的网格(Grid)。 首先我已经在窗体中插入控件 GridVirtual,。然后我再写定义虚拟的类继承从 CellVirtual :

public class CellStringArray : SourceGrid2.Cells.Virtual.CellVirtual
{
         private string[,] m_Array;
         public CellStringArray(string[,] p_Array):base(typeof(string))
         {
                 m_Array = p_Array;
         }
         public override object GetValue(SourceGrid2.Position p_Position)
         {
                 return m_Array[p_Position.Row, p_Position.Column];
         }
         public override void SetValue(SourceGrid2.Position p_Position, object p_Value)
         {
                  m_Array[p_Position.Row, p_Position.Column] = (string)p_Value;
                 OnValueChanged(new SourceGrid2.PositionEventArgs(p_Position, this));
         }
}

在早先的码中我已经创建了一个虚拟单元格,读写存储在数组里的值,当调用SetValue方法之后,我们接着调用OnValueChanged方法提醒grid更新这个单元格。

在窗体的加载事件中我插入这一个代码:

private void frmSample15_Load(object sender, System.EventArgs e)
{
        gridVirtual1.GettingCell += new SourceGrid2.PositionEventHandler(gridVirtual1_GettingCell);
        gridVirtual1.Redim(1000,1000);
        string[,] l_Array = new string[gridVirtual1.RowsCount, gridVirtual1.ColumnsCount];
        m_CellStringArray = new CellStringArray(l_Array);
        m_CellStringArray.BindToGrid(gridVirtual1);
}

我已经把一个事件处理程式加入 GettingCell 事件,又由1000个列和 1000个栏建立网格(Grid)和数组, 建立先前定义的虚拟单元格的一个新实例 CellStringArray ,而且由方法 BindToGrid 我已经把单元格和网格(Grid)相连。

我已经建立一个单一虚拟的单元格, m_CellStringArray,那将会作为点阵式的每个位置。 我们总是必需调用在我们想要在一个虚拟的网格(Grid)中使用的单元格上的方法 BindToGrid 。

为了要完成这个程序,我们应该为单元格写方法 GettingCell 而且储存变数:

private CellStringArray m_CellStringArray;
private void gridVirtual1_GettingCell(object sender, SourceGrid2.PositionEventArgs e)
{
        e.Cell = m_CellStringArray;
}

结果应该看起来像下列的图片那一个一样。 这一个例子也在被包含在 ZIP 文件之中的工程 SampleProject 中。

转载于:https://www.cnblogs.com/wxmxiaoming/archive/2005/10/28/263758.html

SourceGrid 2.0相关推荐

  1. [C#] SourceGrid 2.0_ 翻译

    SourceGrid 2.0 下载来源和二进 - 825 KbDownload Source and Binary - 825 Kb 下载文件编写 - 1.35 MBDownload Document ...

  2. SourceGrid 2.0_ 翻译(1)

    SourceGrid 2.0<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" ...

  3. 估算带卷积核二分类0,3的网络的收敛时间和迭代次数

    制作一个网络分类minst的0和3求出这网络的迭代次数曲线表达式n(δ),和准确率表达式p-max(δ),用预期准确率去估算n,并推算需要的时间. 将minst的28*28的图片缩小到9*9,网络用一 ...

  4. 神经网络收敛标准与准确率之间的数学关系

    制作一个带一个3*3卷积核的神经网络,测试集是minst的0和2图片集,将28*28的图片缩小成9*9,隐藏层30个节点所以网络的结构是 S(minst0)-(con3*3)49-30-2-(1,0) ...

  5. 用共振频率去进行图片分类的尝试

    假设有一种物质,这种物质的原子核的质子数和电子数可以不同,允许质子的带电量不同,并且质子带负电,同时这个原子的电子不满足鲍利不相容原理,环境温度是 (1/1.3806505)*10^23k,电子波的频 ...

  6. 收敛标准对迭代次数影响

    制作一个n*n的网络,将收敛标准分别设定在,0.001,0.01,0.02,0.03,0.04,0.05,0.06,0.07,0.08,0.09,0.1,观察网络达到平衡时迭代次数的变化. 比如如图的 ...

  7. vue省市区三级联动mysql,js/json,html/jsp

    大家好,我是烤鸭: 省市区三级联动数据及页面: 测试的时候,发现少了几个地区,现在补上了,也优化了下排版. 如果你懒得复制和看的话,这里是打包的下载地址. 之前的资源地址也改了,http://down ...

  8. ZAM 3D 制作3D动画字幕 用于Xaml导出

    ZAM 3D 制作3D动画字幕 用于Xaml导出 原文:ZAM 3D 制作3D动画字幕 用于Xaml导出 原地址-> http://www.cnblogs.com/yk250/p/5662788 ...

  9. 将执行文件转化为bat批处理文件的工具(批处理文件方式提供)

    update 2006.4.25 15:20 支持64kb以上的执行文件/// @echo e 0100 4d 5a 90 0 3 0 0 0 4 0 0 0 ff ff 0 0 >>Da ...

最新文章

  1. OpenAI发布新人工智能系统:根据文字生成图像
  2. C语言实现组织图kohone/topology算法(附完整源码)
  3. linux/unix编程手册-61_64
  4. ps作业素材和成品_没有用过PS的画框工具,你还敢说你是设计大佬?
  5. 泽西岛的JSON模式生成
  6. data 谷歌浏览器更改user 路径_Chrome浏览器自定义设置个人信息存储路径
  7. 封装 java 1614782839
  8. linux执行定时,linux定时执行 - 乄珍惜
  9. steam远程畅玩无法连接远程计算机,Steam 如何进行远程畅玩?
  10. sin级数展开c语言,三角函数sin的泰勒级数展开
  11. python列表相加
  12. 路由器wan口ip地址_如何在没有浏览器的情况下查找外部或WAN IP地址?
  13. 9小时突破1000亿,你以为这就是阿里双十一的最大胜利?
  14. 统驭科目(Reconciliation account)
  15. Java中String字符串截取几种方法(substring,split)
  16. matlab 文件输出到text文件总结
  17. 程序人生:起薪13k,兜兜转转还得是软件测试
  18. 对AVL树和红黑树的个人理解
  19. 电影无极下载地址(HTTP下载)
  20. 教育平台项目后台管理系统:课程内容模块

热门文章

  1. 网站黑色字体php,phpweb常见系统中文字体的英文名
  2. JavaSwing_2.9: JComboBox(下拉列表框)
  3. 工具篇: i2c 调试工具 i2c-tools
  4. 网络规划设计师理论--网络体系结构
  5. BERT各个超参数含义
  6. HEU-2017ACM集训队-队内训练赛(3.10)
  7. bzoj2142 礼物
  8. 广电大数据用户画像及营销推荐策略(四)——Python实现
  9. python退出多线程_退出python多线程编程的方法
  10. 梦幻西游鼠标漂移解决办法