自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

老田低代码

专注于免费开放的低代码开发平台,我们推动不了科技的发展,但是希望有机会推动更多中小企业应用软件从0迈向1

  • 博客(38)
  • 资源 (1)
  • 收藏
  • 关注

原创 C#基础系列:开发自己的窗体设计器(实现控件的选择)

所谓控件的选择,就是在设计器上某个控件被选中或者控件获得焦点(通过Tab调整控件焦点)的时候,在控件的四周显示出调整手柄。如下图: 如上,通过控件的调整手柄,我们可以调整控件的宽度和高度。而实现这个调整手柄的关键点其实得益于vs2005控件的灵活性。因为这8个正方形的调整手柄其实就是8个控件。 所以我们本文的重点如下:1、开发自定义的调整手柄控件,也就是这正方形控件;

2008-10-28 12:03:00 15633 16

原创 C#基础系列:实现自己的ORM(ORM的基础概念)

ORM(O/R Mappping对象关系映射)的基础概念 在我们的系统中,存在大量的需要进行持久化存储的对象,这些对象可能是各种各样的业务单据,也可能是我们的系统配置信息等。另外一些属于内存中使用而不需要进行持久化存储的对象,不属于我们的讨论范围。而在支持对象序列化的语言比如C#,Java中,我们可以将这些对象序列化到磁盘文件或者直接保存到关系数据库中。其中关系数据库是我们最主要也是最安全

2008-09-08 17:28:00 16783 9

原创 解析Html生成标签树(一)

解析Html成标签树结构以后,我们不但可以很容易取得想要的元素,同时也很容易将Html转换成对应的XML文件。但是由于代码是在公司写的,所以没有粘贴出来的可能性,所以我只能给出大概的代码流程,具体细节描述,相信各位都很容易写出来,并且写的比我好,关键的是算法实现思想。算法的关键如下: 1.         Html中每个tag都是都将作为树中的一个节点存在的,每个tag都属于树中的某一层。

2008-06-06 17:38:00 24945 51

原创 Dart自从引入null check后写Flutter App总有一种难受的感觉

比如下面的代码,class中定义了一个可null的formCtrl,在使用时候哪怕已经做了if(formCtrl!= null)的判断,在if中调用formCtrl的方法,也还是会飘红。. 哪怕我上一行if中已经做了不等于null的校验。按照我们日常写其他代码的思维,既然我都做了判断,那整个做了判断代码段中就应该让我直接去调用,可是Dart不行。估计是不习惯的原因吧,总觉得这种真的难受,明明已经做了不为null判断了的,还要搞得这么复杂。局部变量名和全局变量名最好不一样,这是直接用AS的自动提示生成的。

2024-09-17 11:27:38 421

原创 根据NVeloDocx Word模板引擎生成Word(六-结束)

变量的汇总我们在#end前,先把要汇总的字段值取出来赋值给变量$baofei,也可以不用这么做,这么做的原因主要是让后面的汇总命令短一点,不易出错而已。》中已经介绍过子表输出到Word表格时的模板语法,这里也是一样的,只不过要汇总我们必须要一个新变量(下图模版中的$total)来保存每个循环的叠加汇总。比如要在生成的Word中显示水印信息,当前“用户名+用户编号”这种显然是一个动态的信息,就可以通过设置水印为E6脚本,生成Word时再进行动态计算。,为什么要这么做呢?:E6脚本,表示当前登录用户的姓名;

2024-09-14 18:24:21 653

原创 根据NVeloDocx Word模板引擎生成Word(五)

由于多行文本框本身就是一个普通字段,所以我们可以通过前面介绍过的取主表字段的方法$data.GetValue("多行文本框字段名")获取到文本框的值,然后借助于$utils.SplitStr就可以默认按回车换行符把这个字段拆分多行,就可以使用#foreach进行输出了。但是在生成Word报告时,往往会要求把图片按每2张或者3张一行,自动填入Word表格中,还需要显示图片名称,这种情况如果不做特殊处理,显然是很难通过NVelocity脚本实现的,毕竟NVelocity脚本能力有限。E6开发平台的图片列表。

2024-09-13 11:45:45 878

原创 根据NVeloDocx Word模板引擎生成Word(四)

图表所需要的子表的操作和E6表单上的子表操作完全相同,可以是主表单上的某个子表,也可以是某个表单的汇总信息,甚至存储过程返回的数据都可以。当前只支持这3种图表的原因主要还是在Word中插入图表实在是有点困难,这种困难主要体现在软件编码上,很难找到相关的可参考代码,Open Xml SDK仅有的例子都是基于Excel的,拿过来压根不能用。当然花费这么大的代价最终也是很值得的,方便了我们自己,同时也方便了E6的用户,毕竟E6开发平台是永久免费开放的,且绝大部分都是没有软件基础的,要他们去开发个插件基本不可能。

2024-09-11 17:19:37 1255

原创 根据NVeloDocx Word模板引擎生成Word(三)

编辑Word Xml的方法确实可以很好地保留格式,并且结合NVelocity等模版引擎可以实现几乎我们想要实现的Word文档生成,但是要在一个几千行的Word xml文件中去增加标签,去增加循环等等是非常非常困难的,就连我们的开发人员也都非常头疼。书签和占位符都有极多的局限性,特别是涉及到子表遍历,条件显示、内容格式等等的时候极其困难,不得不为了解决这些问题定义很多奇奇怪怪的标签。二维码和条形码在E6中只会存储二维码和条形码的数据,而不会存储相关的图片,是在需要的时候才会生成码图。

2024-09-10 18:35:11 728

原创 根据NVeloDocx Word模板引擎生成Word(二)

由上图可以看到,要填充子表首先需要获得子表数据,我们使用下面的语法获得子表数据,语法基于NVelocity,只不过我们的data数据对象中提供了GetChild方法,可以获得子表数据对象,参数“CustomerContact”表示子表“客户联系人”编号(通过这两个例子我们可以看到,基于NVeloDocx,我们不仅仅可以直接在Word中编辑模版(可视化编辑),还可以很好地保留了文档的格式,比如上图,我们模版中设置了列表、粗体、红色等等,生成Word后都很好地保留了这些格式。,这是一个可遍历对象,所以可以用。

2024-09-08 12:18:39 1025

原创 根据NVeloDocx Word模板引擎生成Word(一)

但是由于制作Word模版的过程对于很多人会是一个很头疼的事情,虽然提供了详细的文档,但是我们也经常接到他们的咨询,所以很有必要对怎么基于NVeloDocx怎么制作Word模版做详细说明。了解了最基础的取数方法后,我们就可以制作自己的Word模版了,先制作好模板,再在需要的地方使用上面的取数标签替换就行。特别是在表格中填写取数标签的时候,由于取数标签长度很可能超出您预留的宽度,很可能会撑开您的模版,这些都不会影响最终的展示效果的。下面所有的关于制作Word模版的表述都是基于NVeloDocx的。

2024-09-07 18:37:03 603

原创 强大的.NET的word模版引擎NVeloDocx

NVeloDocx一个基于NVelocity的.NET Word模版引擎

2024-06-10 12:09:47 540

原创 NVeloDocx一个基于NVelocity的word模版引擎

NVeloDocx是一个基于NVelocity的Word模版引擎,目前主要是用于E6低代码开发平台供用户轻松制作各种Word报告模版。完全支持NVelocity语法,使得Word模板制作更简单易用。2、直接在Word中写NVelocity脚本,使用非常非常方便;5、能够校验NVelocity命令,变量等等是否规范;1、完全的NVelocity语法;3、完全兼容Word设置好的格式;7、支持图片列表多列显示;4、能够扩展自己的方法;6、支持子表,孙表输出;

2024-06-08 21:56:58 618

原创 怎么用C#实现和Java的SHA1PRNG 256位互通的加解密?

在Java中使用AES进行加解密的时候,有时候会使用256位的key且摘要算法使用SHA1PRNG生成32字节(256位)的密钥。但是如果使用256位,那么在C#中就不能解密了。经过分析C#中的SHA1CryptoServiceProvider生成的key摘要只有160位(20字节)。如上面Java加密的用C#久不能解密,因为SHA1CryptoServiceProvider最多生成20字节160的摘要。请问各位专家,C#中有对应的方法吗?

2023-05-29 12:00:01 760

原创 对于图表控件Chart,我们其实也自己做了一个版本的

早期开发我们的低代码平台的时候,总觉得.NET自带的Chart控件怎么用都不舒服一样,当时的想法就是觉得要能够随时调整风格,样式、最主要就是想与我们低代码开发平台的数据结构匹配。虽然最终我们逐渐淘汰了自己写的Chart控件,虽然确实是做了一些无用功,但是却为我们积累了不少GDI的开发经验,比如后来的很多自研的控件,比如单据转换的流程图,小部件,形状等等控件就都很容易开发出来了。在我们自己实现的Chart控件中,实现了柱状图,这些图,由于是自己开发的,所以想怎么调整样式都可以。可以实现这些图,柱状图。

2023-05-06 17:58:54 260 1

原创 Visual Studio工具箱控件有现成的吗?

因为我们要实现的模式有点复杂,先预览一下,下面说为什么有点复杂而要自己开发呢。如果是普通的展示,其实还是比较容易实现,但是我们低代码中,设计打印界面的时候,会把与当前单据相关的引用字段等都会显示到工具条中,用户只需要拖拽就行。并且对于引用链长(比如“客户”表单上引用了“员工”表单上的员工姓名,“员工”表单又引用了“部门”表单上的部门名称,这就是引用链)的单据,那么还需要能够在工具条中分页显示。基于上面这两点,用第三方的组件就不是很灵活了,自己开发的话虽然需要一定的工作量,但是可以根据自己的需求灵活定制。

2023-05-05 19:39:11 280

原创 怎么实现.NET下的DataGridView合并列表头

由于要合并列表头,那么我们需要一些额外的扩展信息:合并后的HeaderText,如上图中的“本月业绩”和“上月业绩”、合并列数、以及单元格是否属于合并单元格,比如上图中的“订单数”这一列,那需要能够设置合并后的HeaderText,也需要设置合并列数。但是“订单金额”列,显然只需要知道自己属于某个合并列就行。扩展HeaderCell的目的是要在Paint中重新绘制HeaderCell,所以主要代码在override的Paint方法中。2、扩展DataGridViewColumnHeaderCell;

2023-05-03 14:27:30 2766 1

原创 为了做低代码平台,这些年我们对.NET的DataGridView做的那些扩展

为了系统更易于维护,减少其对第三方的依赖风险,我们总是坚持着“能自己实现的一定不要依赖于第三方”,所以我们低代码平台本身的各种控件,都是基于.NET Framework自带的基础组件进行扩展而来,虽然多写了一些代码,但是最终的结果还是很值得的,整个客户端,开发平台等等包都非常非常小!我们的低代码开发平台从一开始决定做的时候,就追求未来能够支持多种类型的客户端,目前支持Winform,Web,H5,FlutterAPP,当然了,未来也有可能会随着实际的需要淘汰掉一些客户端的。某个数值型的单元格,显示计算器。

2023-04-30 11:34:24 1792

原创 Winform的DataGridView单元格自定义显示(CellPainting)

我们低代码开发平台免费开放后,收到最大的需求就是“单据转换”,主要是我们以前所面对的行业的需求压根没法通过单据转换这样的配置来实现,所以我们一直都是用后台插件的形式处理他们的个性化计算,转换需求。但是免费开放后,面对的都是各种各样的行业,有很多需求用单据转换确实更简单和容易些。所以昨天有朋友看了我们截图后私信想了解下我们图片上的“日期字段”的格式化按钮怎么做的。我们采用了流程化的方式来实现单据转换,同一个单据可以支持多个转换流程,每个流程支持多个转换节点,每个节点完成不同的转换需求,逻辑很合理。

2023-04-26 12:45:13 1980

原创 Winform下实现Grid布局

,他用的方法是在窗体大小变化后,重新计算根据窗体的新Size计算这一个控件的Size。所以我给他评论是:单个控件压根不需要这么做,而多个控件这么做又没有意义,所以最好的办法就是参考CSS的Grid布局方法自定义一套基于WIniform的Grid布局。只不过如果使用Anchor的话,对于一个控件确实是可以的,但是多个控件行列布局的时候用Anchor就不行了,放大缩小后完全乱套。所以刚好周末,就花了点时间描述一下我所说的参考CSS的Grid布局方法来实现一个Winform下的Grid布局,

2023-03-26 14:25:35 1379 5

原创 C#基础系列:开发自己的窗体设计器(PropertyGrid显示中文属性名)

  既然是一个窗体设计器,那就应该能够设置控件的属性,设置属性最好的当然是PropertyGrid了,我们仅仅需要使用一个PropertyGrid.SelectedObject = Control就可以搞定,让PropertyGrid显示Control的所有属性。可是这里显示的属性名是英文的。对于我们开发人员来说这无可厚非,我们也乐于接受。并且让PropertyGrid显示中文属性名,这对于我

2008-10-30 13:06:00 19834 15

原创 C#基础系列:开发自己的窗体设计器(实现控件的拖动)

 控件移动的关键点就是需要设计一个独立于任何控件的类(UIMoveKnob)来控制控件的移动。我这里实现的方法只针对一个控件,如果需要同时选择多个控件,然后同时移动的话,你需要修改这个类,这里是有点难于控制,我使用的方法严重耦合,所以只在这里给出移动一个控件的办法,具体移动过个控件的方法请各位讨论。 要移动某个选定的控件,我们需要实现控件的:MouseDownMouseMove

2008-10-28 16:41:00 17238 10

原创 C#基础系列:开发自己的窗体设计器(在容器上拖动鼠标增加控件)

  本文我们实现一个简单的通过拖动鼠标来增加控件的方法。在我们使用vs2005来开发WinForm应用程序的时候,我们通过选择左边“工具箱”中的某个控件,然后在我们自己的窗体上通过拖动鼠标,一个我们需要的控件就出现了,觉得很爽!其实vs2005中已经有这方面的组件,我们通过简单的代码就可以直接使用,这个你可以用“窗体设计器”Google一下,已经有人做了这方面的介绍。所以我要说的是,难

2008-10-27 16:48:00 15928 10

原创 C#基础系列:开发自己的窗体设计器(总纲)

我所处的行业,所使用的业务系统都不大,但是个性需求极其多,每个地区,每家公司都可能存在很大的差别。所以我就想能够弄一个类似于vs2005的WinForm窗体设计器的开发平台,让用户拖拖拽拽就可以添加自己需要的控件,或者删除不需要的控件,从而完成大部分的工作,实现功能的扩展,而我需要做的,只不过是写写插件代码。 这种类型的系统目前已经有很多,但是那些都是属于别人的,即使我能够免费下载到一个,

2008-10-27 16:41:00 18505 27

转载 社区网站SNS化的思考 – SNS之我见(三)

 社区网站SNS化的思考 – SNS之我见(三)关键字: sns, community 一、 SNS工具还是社区网站? Facebook的创始人马克扎克博格在多次接受采访的时候都强调过:Facebook是一个社交工具,在前面两篇文章我也阐示了这一点。因此SNS网站在我看来分为两大类: 1、Facebook类的SNS,他只是一个社交工具,他不是社区,没有UGC,没有社区文化。Face

2008-10-21 11:00:00 3894

转载 点评国内Facebook克隆网站 - SNS之我见(二)

 点评国内Facebook克隆网站 - SNS之我见(二)关键字: sns, clone 点评国内SNS网站 1、小富即安、目光短浅的校内网 在校内开放API之前,我看错了两件事情:一个是低估了国内web2.0小网站开发app的热情;一个是高估了国内SNS网站商业眼光。 校内网在国内能够成功,我觉得机遇是主要的原因:王兴搞校内网的时候,国家教委开始管制各大高校的BBS,在校学生们无处可

2008-10-21 10:57:00 4064

转载 Facebook的成功秘诀是什么 - SNS之我见(一)

Facebook的成功秘诀是什么 - SNS之我见(一)关键字: sns, facebook SNS是2008年中国互联网最火爆的现象了,无数的SNS网站一夜之间纷纷涌现,前仆后继,慰为壮观:校内、海内、开心、一起、蚂蚁以及无数的Facebook克隆SNS网站陷入了一场空前惨烈的厮杀当中,每个人都生怕错过互联网下一个the big thing的机会,一波接一波的抄袭、炒做和竞争

2008-10-21 10:51:00 4751 5

原创 Google Chrome真的会成为主宰吗

自从Google推出免费开源的浏览器GoogleChrome以后,在各个与IT相关的网站上都能够看到关于Google Chrome的评论,很多是说它将如何如何对IE以及FireFox形成威胁的评论。可是我总觉得某些话不吐不快,真的能造成对这两款浏览器的绝对威胁吗?我的观点是NO。下面我就我的观点以IE为主作点点看法。首先,Google Chrome的几大亮点是:免费,开源,界面简洁,速度快,据

2008-09-22 09:49:00 4948 16

原创 C#基础系列:实现自己的ORM(MiniORM的测试代码)

看到有同学反馈,说MiniORM代码有Bug,也不知道怎么用,所以今天我就写了些测试代码。希望能够给点帮助。同时也发现了两Bug,一并罗列出:1、MiniORM.PubFuncs.GetObjectType()函数:public static Type GetObjectType(string assemblyname, string namespacename, string cla

2008-09-11 10:56:00 9618 15

原创 C#基础系列:实现自己的ORM(构造我自己的ORM)

构造我自己的ORM通过前面两章的描述,我相信很多朋友都已经明白我了下面将要讨论到的ORM的实现方法了,那就是根据自定义Attribute来定义O/R Mapping规则,然后通过反射来动态获取此规则,动态构造SQL语句。由于这个小东西(ORM)出生在深圳,所以我想来想去,她应该有个深圳的名字,所以我就叫她“MiniORM”。不知道各位认为如何?MiniORM采用的是ONE_INHERIT_TR

2008-09-08 17:35:00 14396 45

原创 C#基础系列:实现自己的ORM(反射以及Attribute在ORM中的应用)

反射以及Attribute在ORM中的应用 一、 反射什么是反射?简单点吧,反射就是在运行时动态获取对象信息的方法,比如运行时知道对象有哪些属性,方法,委托等等等等。反射有什么用呢?反射不但让你在运行是获取对象的信息,还提供运行时动态调用对象方法以及动态设置、获取属性等的能力。反射在ORM中有什么用呢?我这里所讨论的ORM实现是通过自定义Attribute的方式进行映射规则的描述的。但是我

2008-09-08 17:33:00 23828 15

原创 在C#应用中,设计自己的配置文件

 在系统开发的过程中,我们总是需要使用配置文件来保存一些我们需要保存的系统参数,毕竟这是.Net时代,如果再使用注册表那就显得复杂了,毕竟操作注册表的API并不是哪么容易理解的。所以在.net应用程序中,都默认出现一个App.Config(对于 Web应用程序是Web.Config)我们可以将系统运行所需要的参数采用加密或者明文的方式保存在这个文件中。但是当我们需要大量的,并且有一定逻辑结构的

2008-08-31 14:49:00 8709 12

原创 GZipStream实现压缩以及出现的问题

在抓取页面的过程中,在存储抓取到的页面内容的时候我需要先将页面压缩再存储,为了使用上的方便,采用了2.0下的GZipStream来进行压缩。引用如下:using System.IO;using System.IO.Compression;......public static byte[] Compress(byte[] data){    Memory

2008-08-29 09:29:00 9363 6

原创 DataGridView导出到Excel

  这几天做一个Winform的系统,需要用到将DataGridView导出成Excel,以前一直没有在意这些方面的问题,因为以前做VB的时候已经做过很多这方面的导出,所以总认为小菜一碟。我用的是VS2005和Office2003。可是真正使用的时候才发现问题多多:首先是添加了Microsoft Excel11 Object Libray之后,发现引用里面的” Microsoft.Of

2008-07-05 15:39:00 7060 8

原创 记录KMP算法,记录其经典之处。。。

离开学校已经多年了,早已经不再抚弄那些陈旧的书籍。周末,深圳的天气阴沉,老天这段时间总是很乐意显摆,动不动就给深圳人民来次几十年一遇的暴雨,似乎要把一年的雨水全部在这些天下完似的。所以呆在家里面看电视,上网,实在也无聊。随手翻开大学时候的(数据结构,还留着啊,当初刚出来的时候总没有底气,总希望能够随时充电用)。看到了字符串的模式匹配一章。突然发现KMP算法是如此的经典。故记之。。。 

2008-07-03 14:30:00 3666 1

原创 Javascript中的面向对象编程实例

一直以来,我都主要是做winform方面的编程,最近做了点web方面的,所以也研究了几天的javascript。偶有心得故记之:应用面向对象的思想在javascript中同样适用,关键的是你敢不敢用,想不想用。我曾使用vs2005编写了一个vs2003工具箱完全类似的导航工具条,我比较喜欢在winform中通过这种方式向用户提供应用程序功能的导航。所以我也想在web中也使用这种方式。网络上

2008-06-15 00:41:00 4387 8

原创 解析Html生成标签树(二)

前面两篇讲解了解析Html的思想个核心算法,感谢各位提出了意见。先专门列出一文作为解释:1、ViewStates提到,“”怎么办?这个是可以解析出来的,其中解析后节点名为“td”,而“ 阿道夫骄傲了沙发如图:上面的图中,包含了上面提到的例子。 回复ml_dark 兄象这种..你看看你的解析结果....解析结果如上图。

2008-06-13 15:41:00 6313 11

原创 解析Html生成标签树(前言)

提示:根据这几天的访问量跟踪,我发现很多访者都没有很好地关注到真正进行算法描述的章节《解析Html生成标签树(一)》,特此进行提示。搜索引擎一个最重要的步骤就是,获得网页的正文内容,我相信每个人看见一篇网页的时候,从视觉上都很容易知道哪个部分是正文内容,哪个部分是版权信息,哪个部分是广告信息。但是要让计算机明白这些,估计要若干年(到时候还不知道人类是否已经变异成4只眼睛,5个耳朵。。。)之

2008-06-03 18:31:00 10988 13

原创 开张

一直以来都想写点自己的东西,但是人懒没有办法。。。今天以此为证,希望今后能够为各位在我的空间上留点点内容,不要荒芜了这块土地。。。

2008-05-12 18:47:00 1183 1

实现自己的ORM系列源码 - MiniORM

这是我Blog(http://blog.csdn.net/RonoTian)中的系列文章《实现自己的ORM》系列的配套资源,如果你需要详细的了解MiniORM的相关实现,那请自己查看我Blog中相关文章。

2008-09-09

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除