分享
 
 
 

完全用户自定义数据处理的探讨2

王朝other·作者佚名  2006-01-10
窄屏简体版  字體: |||超大  

通过上面这个窗口,我们就可以设计出一个合适的数据表,通过点击“生成”就可以在数据库中生成这个物理数据表。同时,这些数据也是我们数据字典中最重要的数据。我们可以把表名和字段名都按照一定的规则生成比如CTAB001表示表名,CFLD001表示某个字段名,然后在数据字典里建立起他们和汉语表名字段名的对应关系,这样就生成了我们的数据字典。

这里面有一些难点大家要注意一下,其中一个是主键生成的问题,特别是在修改表的时候,最好先把主键删除了再重新生成。另外,修改表时比较麻烦,最好把生成的SQL语句调试一下,多试几次,找出修改的规律。

我想,经过多次调试修改,如果再完善一下的化,通过上面的方法可以完成大部分表的生成。

其次,对于程序设计界面,我们用的更多,不管是pb,Delphi,vs.net他们基本上都是以资源文件的形式,把你设计的界面记录下来,主要是记录各个控件的属性和他们实现的方法。我认为,这个工作我们完全可以模仿,可以作出自己的设计界面来,如图:

在这个窗体设计界面里,我们设计的是一个主从表的结构,主表字段对应在上面的几个控件里,从表对应中间的那个网格控件,而最下面的那个控件是最重要的控制器。属性设置也很简单,和通常开发工具里的属性设计器(对象观察器)基本一样,比如对于从表,我们只需要设置它的表名就可以了,别的一概不用设计(也不用管它有几个字段,也不用管数据类型)。

当然,因为是主从表,所以我们还要设计主从表之间的关系,可以通过关系控件来设置,下面是两个表控件和关系控件的属性设置界面:

然后,我们可以把这些界面设置保存到配置文件中去(如果需要也可以保存到数据库中),下面是生成的一段配置文件:

<?xml version="1.0"?>

<struct>

<form>

<prop>

<type>CustomerForm.DesignForm</type>

<attr Text="订货单录入窗口 - [test.cfm]" BackColor="-1250856" Dock="None" Font="Name=宋体,Bold=False,Height=14,Italic=False,Size=9,Strikeout=False,Underline=False,Unit=Point,GdiVerticalFont=False" ForeColor="-16777216" Height="431" Left="0" TabIndex="0" Top="0" Width="557" Caption="订货单录入窗口">

</attr>

</prop>

</form>

<controls>

<control>

<type>CustomerForm.CusLabel</type>

<attr Text="订单号" BackColor="-1250856" Dock="None" Font="Name=宋体,Bold=False,Height=14,Italic=False,Size=9,Strikeout=False,Underline=False,Unit=Point,GdiVerticalFont=False" ForeColor="-16777216" Height="20" Left="9" TabIndex="1" Top="10" Width="51">

</attr>

</control>

<control>

<type>CustomerForm.CusTextBox</type>

<attr Text="" BackColor="-1" Dock="None" Font="Name=宋体,Bold=False,Height=14,Italic=False,Size=9,Strikeout=False,Underline=False,Unit=Point,GdiVerticalFont=False" ForeColor="-16777216" Height="21" Left="66" TabIndex="2" Top="8" Width="82" TableList="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&#xD;&#xA;&lt;TableInfo xmlns:xsd=&quot;http://www.w3.org/2001/XMLSchema&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;&gt;&#xD;&#xA; &lt;TableName&gt;订单&lt;/TableName&gt;&#xD;&#xA; &lt;TableID&gt;CTab003&lt;/TableID&gt;&#xD;&#xA;&lt;/TableInfo&gt;" FieldInfo="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&#xD;&#xA;&lt;TableInfo xmlns:xsd=&quot;http://www.w3.org/2001/XMLSchema&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;&gt;&#xD;&#xA; &lt;TableName&gt;订单.订单号&lt;/TableName&gt;&#xD;&#xA; &lt;TableID&gt;CTab003.CF001&lt;/TableID&gt;&#xD;&#xA;&lt;/TableInfo&gt;">

</attr>

</control>

当然,根据需要,你可以自定义任意格式的配置文件,我这里采用的是XML格式。

这里也有一些需要注意的地方,其中之一是设计界面中显示的设计控件。这些控件看起来和标准的控件没什么两样,但他们全都是我从UserControl继承过来的,然后自己绘制他们的外观,使他们和真正的控件看起来一样,但不会响应任何事件。其实,连最下面那一排六个按钮也是一个控件,也是从usercontrol继承过来的,只是在上面花了六个按钮的样子而已。

这些还不是问题的关键,关键问题是属性设置和保存问题,怎样设计这些属性的编辑样式,怎样组织存储这些属性,都是我们需要注重考虑的问题。一开始我打算使用PropertyGrid控件,但是它不适合企业人员使用,不好显示汉语属性名称,而且重新隐藏那些不想显示的控件属性本身也比较麻烦,最后还是决定自己写了一个,可以显示编辑最常用的十来种数据类型,基本上也就够了。

控件的托放、移动、改变大小等常用的功能都比较简单,就不介绍了。

在存储属性的时候,有一些自己定义的比较复杂的属性,可以通过序列化的形式转化为字符串再存储,如果想读这些控件属性,可以把字符串再反序列化为属性。

最后就是根据这些配置文件来生成输入界面的问题了。

生成输入界面比较好办,只需要解析配置文件,根据配置文件的信息生成对应的控件即可。但难点是这些控件的事件处理方法怎么办?控件怎样绑定?比如当我点击保存的时候系统怎样知道我要保存了,它又怎样知道我要保存什么东西?

这些东西深究起来确实比较“咬手”,好在我花了几个月时间开发出来一系列组件,可以很好的处理这些东西(其实只是使用了这套组件很少的一部分功能)。其实从大的方面来讲,这些问题也好解决。毕竟这些数据处理都是很模式化的一些东西,差别就在数据的字段数量和类型上不同,真正的业务逻辑差不了多少。我们可以写一些和具体数据表无关的方法,通过数据集本身来了解数据表的信息,比如主建信息,比如关系信息等。还比如,我们使用datagrid来表示从表数据时,就可以使用我们数据字典里的东西,可以很好的生成datagrid的输入界面,而不用考虑究竟有多少列,也不用考虑什么数据类型。当然,这个datagrid是增强的datagrid,本身就支持很多种功能。

当然,我很感激EntLib,它给我带来了很多便利,比如数据库存储这一块,使用它就比较容易实现数据的处理,经过进一步功能增强,可以通过一个方法来存储任何数据集,而不用关心数据集里有几个表,也不用关心表之间的关系,更不用关心表里有什么字段了。

在我们提供了这些和具体数据集无关的方法以后,就可以在生成数据处理界面时,把这些方法挂接到这些控件的事件上,然后系统就可以正常运行了。这里面也有一些关键点,其中数据从数据库取得到存储都是很关键的地方。

这些就是我的一点感想,今天就写到这里把,希望和大家一块探讨。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有