Rss & SiteMap
Foxtable(狐表) http://www.foxtable.com
贺老师一直说现在的Table无论从哪方面说都超过以前的DataList,所以,这两天我对Table控件进行了简单试用,我把我的感觉,不管是好的,还是不好的,公平的评价一下:
1、目前的Table(Normal,副本),其功能和以前的DataList基本上一样。但有一个明显的不一样的地方,就是,以前的DataList的属性和事件直接在窗口中设置,但现在不管是哪个窗口的Table,都共享表Table 的同一属性和事件,并通过表名来设置不同窗口中的属性或不同窗口中的事件。
在实际应用中,同一窗口可能动态加载不同的表。以前的时候,不管DataList 加载哪个表,都在窗口中设置DataList控件的属性和事件,既直观又方便快捷!但是,在新的Table控件中,设置Table控件的各种事件,不能在窗口中直接设置,必须回到各个表中,根据表名设置窗口控件的事件,既浪费时间、不方便,而且也名不正言不顺。窗口控件的事件本身就应该在窗口中设置,但现在还要迂回到表中进行设置,估计没有人感觉这个很顺手吧!在实际中,有可能一个表被许多个窗口来引用,我们增加一个窗口后(假如引用了表A),不能在窗口中设置这个Table控件的事件,需要回到表Table中重新设置事件;再增加一个窗口(假设又引用了表A),仍然还要回到表Table中重新设置事件。而且,在表Table中设置事件时,还要记忆并引用表中的控件的名字(类似于 窗口1_Table1这样的名字),不能直接使用e参数,也不太方便。
总之,我认为目前的Table控件的确与DataList功能重复,但是,操作方式不如DataList方便。如果可能的话,建议改回DataList 以前的那种操作方式。
另外,其他贴子中已经说过了,以前的时候DataList中定位当前行需要使用FindRow和行号,但在新版的Table中,对此没有作出任何改进,甚至还没有以前方便!不知贺老师能否把定位当前行功能变得自动化一点,让表Table的当前行自动随Table控件的当前行移动
2、我认为SQLTable是一个真正的创举,具有一定的跨时代的意义。因为它可以直接从后台数据库加载表并生成Table和DataTable,而且生成的Table可以有自己的事件。几个月前,我曾多次建议可以动态加载Table,即利用代码直接从后台数据库生成Table和DataTable,贺老师一直没有采纳,现在借助SQLTable基本上实现了这个功能。以前的版本中,所有的Table必须在项目中先加载才能使用,在项目打开的时候至少必须加载一个空表,所以以前的动态加载表名不副实。我以一个项目中,大概有60多个表,项目打开的时候,即使加载这60多个空表,也需要4分钟左右的时间,启动太慢。如果以后改用SQlTable,所有表都在窗口中加载,那么,启动速度会成倍提高,占用系统资源也会成倍减少。但是,要把目前的表全部改成SQLTable,目前的系统还有一个很大的问题,就是SQLTable中的Table只有在窗口打开的时候才存在,窗口关闭的时候就不存在了,而在窗口打开的时候,当前表的操作可能会引用其他的表(例如编辑表A时可能要引用表B),而其他的表(表B)如果在项目启动时没有加载,表B虽然在其他窗口中加载Table但其他窗口没有打开,所以这时候就不能引用其他的表(表B)。
我不太清楚reachtone老师是怎么解决这个问题的,我的建议是:对系统稍作改进,让SQLTable中动态生成的表,在窗口关闭的时候也能可见(或者换个说法,窗口不打开不显示,但就像窗口打开时一样让窗口中的Table可用);或者提供另外一种办法也行:让系统增加一个功能,可以利用代码直接从后台数据库生成Table 和DataTable。如果这个问题真正解决了,对狐表设计软件时的动态加载数据,将是一个彻底的革命!
关于1,不太明白,贺老师总是误导大家一个问题: Table控件=Table表。实质上,不是我说还是你说它是两个东西,它本来就是两个完全不同的对象,一个是可见的表,一个是窗口控件。从道理上来讲,表是表、控件是控件,表的属性和事件应该在表中设置,控件的属性和事件应该在窗口中进行设置。不太明白,贺老师是专家,为什么非要故意把两个完全示同的东西搅到一起,让大家把概念搞混呢?区分开,既清楚,又方便快捷,有什么不好呢?对于新用户来说,DataTable 和Table的概念已经让很多人头痛了,现在你再把Table 控件搅起来和表放在一起划等号,会把新用户吓跑的!?
关于动态加载的问题,我认为以前版本中的动态加载根本起不到应用的作用,即使所有表都加载空表,我以前的项目启动需要3-5分钟,如果全部改为SQlTable,启动速度可以加快若干倍。不知是否我没有把问题说明白,我提的关于动态加载Table的建议有什么不对吗?
或者现在可以用这样的变通办法来解决:在一个窗口中,增加多个SQLTable 控件,把所有可能用到的Table都加载进来?
如果副本的事件独立的话,意味着很多事件要写两次甚至更多了,例如DrawCell事件。
1、以前的时候DataList中定位当前行需要使用FindRow和行号,但在新版的Table中,对此没有作出任何改进,甚至还没有以前方便!不知贺老师能否把定位当前行功能变得自动化一点,让表Table的当前行自动随Table控件的当前行移动
2、目前的系统还有一个很大的问题,就是SQLTable中的Table只有在窗口打开的时候才存在,窗口关闭的时候就不存在了,而在窗口打开的时候,当前表的操作可能会引用其他的表(例如编辑表A时可能要引用表B),而其他的表(表B)如果在项目启动时没有加载,表B虽然在其他窗口中加载Table但其他窗口没有打开,所以这时候就不能引用其他的表(表B)。
1、这个建议很有道理。
2、如果表B需要在窗口中显示,就是动态的table,一条sql语句就可以;如果不需要显示而只是调用数据,可以用sqlcommand的ExecuteReader方法。调用没有加载的表可以很自如啊。
或者现在可以用这样的变通办法来解决:在一个窗口中,增加多个SQLTable 控件,把所有可能用到的Table都加载进来?
为什么要一下子增加这么多sqltable呢?一个就够啊。
比如,我现在做的一个录入窗口,里面有很多的编辑框。当焦点进入到不同的编辑框时,就将这个窗口中table控件的内容进行动态调整(赋予不同的sql语句就行了)。我将这个table控件是作为选项列表来使用的,进入不同的编辑框,table就生成不同的列表项目。一个table就够了。
为什么要一下子增加这么多sqltable呢?一个就够啊。
比如,我现在做的一个录入窗口,里面有很多的编辑框。当焦点进入到不同的编辑框时,就将这个窗口中table控件的内容进行动态调整(赋予不同的sql语句就行了)。我将这个table控件是作为选项列表来使用的,进入不同的编辑框,table就生成不同的列表项目。一个table就够了。
老大好高深哦,做个列子看看嘛.
是不是把这3个事件直接在窗口进行设置,独立于Table?如果是这样,强烈支持!