有关Grid的问题(200分)

  • 主题发起人 主题发起人 barton
  • 开始时间 开始时间
B

barton

Unregistered / Unconfirmed
GUEST, unregistred user!
我极度反感DBGrid,我已被它弄得焦头烂额。
我们设计数据库时总要达到3NF,比如性别民族什么的,不可能用文本
字段,而用代码表示。在DBGrid中编辑时虽然可以设定PickList,但在
选择时不能更新数据库!因为你在选中某个数据时根本没有事件发生!
而且不能在点取列时象ExtListView一样排序。

于是我用DataGrid,当然比DBGrid强100倍,方便是方便了,但不能画
跨行或踌列的Cell,而且内置编辑器只有三种:Text,ComboBox,Ellipsis,
很难添加新类型。

于是我又瞄准了ProfGrid,可以实现跨行或跨列的Cell,而且定义内置编
辑器也方便,但画面别提多难看,其列属性不能在设计时定义,而且不
带源代码!

有人说HyperGrid好用,我又试了试,发现并没有根本的改进。而且没有
中国人喜欢的跨行跨列。Cell组件也可用,但不是免费的,而且在Delphi
中应用不太方便。EReport更糟,非要定义一个外部文件不可,设计时不
能定义,也不支持内置编辑器。我不知道是否还有更好的Grid?

要求:
1.支持设计时定义行或列,一种即可;
2.支持内置编辑器,Edit,ComboBox, Ellipsis, CheckBox;
3.支持跨行和跨列的Cell,可以定义两层三层或更多层的表头;
4.支持列头点击排序;
5.带源码.
 
infopower的DBGRID只有2不符合....

支持跨行和跨列的Cell的确很少见,也许谁可以改动源代码试试看
 
DBGrid当然能够满足你的要求,问题是你对DELPHI的DATASET,TABLE,DBGRID的理
解及使用还没掌握到家。

建议你买一本数据库编程方面谈的较好的DELPHI的书来看一看。千万别找这个那个控
件的乱试,时间耽误了不说,根本学不到什么东西。

哪个控件都不会十全十美,都有各自的特点,不要光满足于他的外表,要看更深层的
东西。

不好意思,一堆废话!
 
INFOPOWER支持你需要的大部分属性,DBGRIDEH支持多重表头,
跨行跨列,自己考虑了,不过我看到过速达2000中的DBGRID控件
是如你所要求的,不过和CELL一样,不 免费,所以得靠自己
 
那个Formula One 怎么样?它有Execel表格那样的功能,可惜也不是免费的。
 
formular one到处可以下载的说
不过是ocx,不爽的说
 
huizhang兄真不够客气,也许当老师的都有好为人师的特点吧。

barton自认对DBGrid,TTable,TDataset有比较深的理解,但每个人的认识总是
有区别的。我有多个理由不用DBGrid:

1.我总是希望数据处理和数据访问是相对独立的,数据访问在一个模块中,数据
处理在另一个模块中,两个模块通过事件和方法交换数据。这两个模块可以在
不同的文件中,比如一个是EXE,另一个是DLL,如果你替换一个数据库平台,只需
更换一个DLL即可。一般我定义四个事件:OnListItem, OnInsertItem,
OnDeleteItem,OnUpdateItem,当在处理数据时触发相应事件,数据库根本是安全
的,这种思想与Windows的思想完全相同。与TDataLink相比,一个是离线式的,一
个是在线式的,我更愿选择离线式的,其安全性更高。DBGrid依赖DataSource,或
者说DataLink,很难将数据访问从数据处理中剥离,所以我不仅不用DBGrid,也不用DBText,DBListBox,DBComboBox....所有需要DataLink的控件;

2.DBGrid是一付苍老的面孔,左边一列是光标指针,右边是数据,如果想将某一列
固定起来不作水平滚动,太困难了。软件的生命在于创意,没有创意的软件是短
命的。操作的灵活性是保证软件质量和性能的关键,不是所有的人都习惯于千篇
一律的,特别是这种千篇一律不是自己所创。DBGrid是约束程序员思维的绳索,
无数的程序员将倒在DBGrid下...Tom Swan曾在他的著作中反复阐明这一点。

3.实际应用中,DBGrid非常慢,如果你定义一个复杂结构的话,即使是刷新也是非
常慢的。

4.DBGrid太依赖你事先做好的数据库结构,如果你在Grid中看到的结构与数据库
结构有较大差异的话,DBGrid处理起来非常困难。本论坛有人提出过这样的问题:
两个表:
ID Data1 ID Data2
1 100 1 200
1 200 1 400
1 200 2 200
想得到这样一个视图:
ID Data1 Data2
1 500 600
2 200
这个关系在DBGrid中如何表示?也许你的数据库无论多么复杂的查询都支持,那
么你希望你的软件只在这一种平台下运行吗?比如:M$ SQL支持存贮过程,而M$
Access就不支持,你只能自己编写代码来补这个缺。

5.我自己写了一个控件专门处理类似性别民族这些数据,在一个系统里有时这样
的类达到几十个上百个,加一每一类有时有几十个上百个项,这样完全有必要建
立一个表来处理他,以供用户可以随时添加。我的快速码创意在我的控件中已
经实现并且运行稳定,而这个快速码无法在DBGrid中应用。我宁可重新寻找一个
新的控件来替代它,也不愿放弃快速码。如果你用过我的快速码,你一定会和我
有同感。

...说到书,三年多来也看过不少书,不过我反感徐新华的书,没有一点自己的东
东,相比之下李维的书就强多了,美国人写的书我也爱看只是翻译的稍差,有些
书写得比李维的强,但找不到看李维的书时的一种快感...

不过总有些问题能和huizhang兄交流,毕竟你有一个TLine让我佩服:
所有的Grid中最有希望改造的就是DataGrid,它继承自StringGrid,自然可以扩
充编辑器,只是实现跨行和跨列方面有些困难。我想在控件中加一个连接表,记
录所有被跨越的Cell,我本望有一个GetRect的Protected函数可以被我重载,但
没有!这样包括Paint在内的所有方法都得重载!这和重写一个控件又有什么区
别呢?
 
如果找到好用的Grid控件,请barton兄通知小弟 jhliang@ihw.com.cn
 
Sorry, barton! 老师就是老师!

1. Delphi已有
2. TDBGrid.InPlaceEditor
3. 复制一个DBGrids.PAS到你的目录下改一个名, 随便修改, 在注册
4. 同上
5. ...

至于你讨厌Delphi处理数据的方式, 那就另当别论了。
 
barton, 我和你有深深的同感,

实际上, 关于数据库编程特别是 做C/S数据库编程的人,都很怕DBGIRD
原因我想你是知道的。 做C/S编程受很多SERVER端制约, 也就更多的
注重经验, 并非精通DELPHI就 能搞定一切
这也就是 李维的 DELPHI3 从入门到精通 让我喜爱的原因
里面更多的是经验!!

说实在的, 真正到生活中需要用到的是上面的这些经验,而非DELPHI的某个特技
所以我 认为大富翁里的 众人 缺乏的也是这些, 学生和老师永远是学生和老师
理论与实践总是有距离(无贬义,说的是真心感受.)
除非当学生和老师也去公司里真实的做项目.

你所说的 GRID 现成的还没有,不过用RXLIB里的或INFOPOWER里的 自己动手写
一些代码还是可以完成的
我自己在写一个和你所说的类似的东西, 我用 RSD的 DBLISTVIEW做父类
可以很好的做到你所说的要求
首先 支持TITLE点击, 第二 , 支持数据敏感, 第三,支持跨行跨列的
处理和CELL概念(column里) . 第四, LISTVIEW有排序能力

而且RSD的 DBLISTVIEW 我找到了源代码,


 
欢迎 王寒松 参战!

Barton老弟,我知道你在边疆干的很不错,如果我使你感到委屈,我在此向你表示道歉。

争论是必要的,我可没有一点个人人身攻击的意思。Barton、王寒松、以及其他的各位兄弟,希望你们能够写出一个比较有特色的、功能更强DBGrid来。
 
大家争论得真热闹!我也想说几句。
首先,做为一名编程高手,我想除自信、狂傲等等特点之外,最应具备的还有一点,
那就是谦虚!计算机的分支是如此之广,君不见大富翁论坛就设了多少分坛。一个人
如果想对所有这些领域都有深广的了解,我想是不太可能的,也就是说,每个人的知
识都应该是交叉的,而不存在一种包容关系。
其次,关于经验的问题。我想在这论坛上有80%以上的问题是由实践中的问题而来或是
肯定与实践有关,而不是凭空而出的。它并未脱离实践,大家只是基于论坛这种形
式,将问题化解为理论上的难点提出,而不可能将最直接的问题要大家来解决,那不
都成了‘200分来一个工资管理程序’:)。从这一角度来说,王兄你作为一名高手,应
以一种居高临下的态度,来耐心地解决大家的一些初级问题,而不应认为众人的讨论
与实践脱节。我想反问您一句,您作为一名高手,大富翁对你没有什么帮助吗?:>
谦虚与狂傲并无矛盾,我想大家聚于此处,应取长补短,而不要太在乎争出个高下,
解决问题本身就是一种乐趣。
说多了,有些跑题了。
实际应用中,我们主要用rxdbgrid,我也觉得不是很理想,在delphi的后续版本中
应会增强的。不过我想大家不会等的,有什么好办法能够解决,我也想知道。

btw:你的那个ereport不错,我们项目中的一个报表正在用她。*_@
 
huizhang:老师绝对就是老师,没错!但老师让我去看数据库的书...(:-(
DBGrid.InplaceEditor是个什么东东?学生只知道StringGrid有这个属性。

王寒松:我差不多是使用Delphi3的第二天就用DBListView,我最欣赏Brad
Stowers所作的ExtListView,但是,有对某几列滚动锁定的ListView吗?
连Windows Explorer都不是!

我也用过你的EReport,做报表还是不错的,有些地方我作了些改进,未来得及
测试,不敢拿出来。不过我想报表只能解决一小部分打印问题,我正在做一个
能够通用的打印机控件,要输出RichEdit,ListView,Bitmap,Text, Shape等
只需调用一个方法,指定一个按纸张物理尺寸的区域即可。
 
的确,delphi在商业控件领域和VB还有不小的差距。
以上所说的所有功能,都可以在True DBGrid for VB中可以找到。

如果大家有心,真的可以试一试做一个完整的DBGrid控件出来。
事实上,做一套完善的控件是很不容易的,我没有其他建议可说.

有了需求,还怕没有市场吗?

 
Delphi 也罢,VB也罢总是别人的东西,可是我们什么都没有!
 
to barton,
DBGrid中的InplaceEditor与StringGrid中的是一回事,都来自一个祖先TCustomGrid,
他允许你编辑Cell中的文字。你可以通过控制他的属性、方法、事件来实现对数据输
入的控制、过滤等功能。
 
试试Orpheus 3控件组,别人有的它没有,别人没有的它有
 
Orpheus 3是什么?
 
使用AdvStringGrid试试看吧,我一直是不用DBGrid的,
AdvStringGrid是StringGrid的扩展控件,我决定不错,
所先用TQuery控件处理完毕,然后全部用手工添入AdvStringGrid中,
很理想.

如果没有这个控件,我给你发.
 
AdvStringGrid? 我觉得不好,一没源码,二行数一多速度就慢。当然,其它功能
有些特点。
 
后退
顶部