[续] 旷世难题(实现Dbgrid第一列为序号的方法 )(5分)

  • 主题发起人 主题发起人 青云
  • 开始时间 开始时间
to 青云
您好!
1. 4.0的控件在查询时能否象3.4那样模糊查询?
2. 右键菜单,出现很多其它Grid的操作,不简洁,能否去掉?
3. 右键菜单中的复制、粘贴功能为何总是失效的?
4. 生成的临时文件能否设定路径?
谢谢!

=======================
1.模糊过滤是我最看重的功能,这个功能不但继续保留,还要继续完善;
2. 右键菜单,出现很多其它Grid的操作,不简洁,能否去掉? ,这个其实可以在控件里设置参数,自己控制这些右键是否隐藏;
3. 右键菜单中的复制、粘贴功能为何总是失效的? 这个需要继续完善;
4. 生成的临时文件能否设定路径? 不明白什么临时文件。
 
写个控件真是艰难~~
 
to 青云
您好!
所谓临时文件就是在运行过程中或运行后产生的,象保存GRID各列宽的INI文件等,都保存在当前目录里,4.0产生很多临时文件,运行后自动删除。这在制作光盘运行的演示程序来说,是很麻烦的,因为光盘只读,所以不能在光盘上运行演示程序,只能安装到硬盘上才能运行。
另外,当左边的指示区(带)设为不显示时,会出现错误,可能是显示序号时找不到地址了吧?
能否增加中文金额格式显示?表头显示元角分,表体显示竖格线
 
如果象青云和kinneng这样的专家们能系统地指导一下初学者,可能更有意义。在大富翁里很多问题都是重复的,但却没有系统地讲解。都是头痛医头,脚痛医脚。
众多专家高手们重复回答这些支离破碎的问题,是不是在浪费时间呢?
建议:整理出系统的开发教程
市面上销售的很多书真的不敢恭维,没有深度,初学者还看不懂,真正到开发时才发现到处都是问题。
开发人员和自学人员写出来的书应该更实用。
1.您为什么不继承Grideh,而要改写Grideh,我一直不懂。继承和改写优缺点是什么?
2.实现这些功能的钥匙是什么?能否教我们一些钓鱼的方法,而不是给我们鱼?
 
我是楼主青云,借这个热贴,请大家关注一下:

如何 通过 AdoQuery.UpdateBatch 实现多表关联,单表更新 的问题:

http://www.delphibbs.com/delphibbs/dispq.asp?lid=3465427

这个问题也是困扰了我好多年。始终解决不了。
 
我是楼主,发现我该写的ehlib4.0有个新问题:
以前的模糊过滤我都是在AdoDataSet下测试的。

如果我用到了ClientDataSet.发现过滤有了问题,希望大家帮我一起想想。

具体问题:
ClinetDataSet 模糊过滤中文的bug

如果 用
ClinetDataSet.Filter:='name=''江南制造总局''';

那么可以把 字段名为name的值为“江南制造总局” 过滤出来;

但是如果想用模糊过滤
ClinetDataSet.Filter:='name like ''%江南制造总局%''';
呵呵,ClinetDataSet就傻掉了。
它识别不了,过滤不出来了。


我这个测试环境是在oracle 数据库下测试的,字段name的类型是 varchar2(50);

这么简单的过滤为什么用AdoDataSet好好的,怎么用到ClinetDataSet就不行了呢?

当然ClinetDataSet对英文的模糊过滤是没有问题的。就是中文有点问题。
也许把name的类型改成固定长度的就没有问题。
也许把ClinetDataSet 所对应的DataProvider的DataSet的字段静态加载固定列就好了。
但是我不想那样做。

为何因为ClinetDataSet的这个bug,而让我们迁就它,作出许多影响我们开发效率的事情呢。

希望有兴趣的朋友们讨论一下。怎样改写或者继承ClinetDataSet组件 来改正这个 过滤识别中文 存在的问题;

如果有第三方的ClinetDataSet的替代组件也好啊!

http://www.delphibbs.com/delphibbs/dispq.asp?lid=3468703
 
如果我是专家,这里很多人就是神仙了,如今DFW的专家真是买少见少,我估计是这行饭难
吃,大多转行离场了,又或者之前发了财,现在洗手不干了,很多想问的问题,问了也是石
沉大海,所以上来尽量不问问题了,挑点比我菜的问题来灌灌水,不管是对是错,捞点分,
满足一些虚荣心。

推荐的书,台湾的《Delphi进销存程序设计》书,是我见到唯一一本完整介绍整套进销存
程序编写过程,并且程序真实可用的书。附带的源码在网上有下的,但源码没什么可看的,
这本书从接到业务,如何做需求分析,制作模板,到写整个程序,书不是很厚,关键问题却
说得详细,不是特别菜的一看就懂,我反复看了几十遍才懂,经常看经常觉得有新意,大陆
版不是很贵,但同名的很多。

还有就是技术手册类的书,这种书字体不大,象字典一样,介绍每一个函数的用法,做五金
的怎么也弄本五金手册,这种书就是你们程序员的五金手册,这是工具书,值得买的,至于
那些抄来抄去抄网上,没有地方用得上的技巧书,那些不干事的长篇大论,核心问题敷衍了
事的管理系统书,还有那些一看书名就是骗局的从入门到精通的书,没空看。

修改与继承,因为有些变量放在私有,保护的区域,继承访问不了,只能修改,dbgrideh也
是改dbgrid的,还改的得很乱,还保留了dbgrid的bug,并新增了一些bug,要去序号不难,上面说的很多方法,但是dbgrid是继承grid的,所以有些动作在grid里面做了,界面发生变
化,序号显示混乱,甚至发生连锁反应,将看似不相干的地方都关联起来,所以不去限制或
者预测这些变化,那就只有修改grid,将变化反应出来,这样做太过分了,要限制或者预测
这些变化一定要根据自己表格的特点,dbgrideh真的比较复杂,做起来花很多时间。

举个例子,表格横向不满的时候,下方的横向滚动条不显示,这时候表格有1~10行,第10行
出现的时候,显示序号的指示列自动扩宽,表格向右挤,横向滚动条出现,第10行没地方显示,表格只有1~9行,指示列又自动缩窄,表格横向不满,横向滚动条消失,第10行重新显示,这样一来进入一个死循环,我花了很多时间来解决它,且用在DBGridEh和DBGrid均无
效。
 
哎,我现在暂时就用AdoDataSet,
ClinetDataSet过滤有bug,不敢用。而且字段如果是unicode码的话,还会报错。
真佩服这个据说功能特别强大的数据集 怎么有这个低级的bug.


AdoDataSet的批量更新不能处理多表查询单表更新的问题。
ClinetDataSet好像也不容易处理这个问题。

目前我将就着使用AdoDataSet

Ehlib 的控件 这段时间又小改过。 希望大家有兴趣的继续参考

http://www.daizhicun.com/dmx/dai/ehlib_20060612.rar
 
n 久,还在搞这呀,楼主有耐心啊
 
ClinetDataSet本来就这没能力,全世界都知道,硬说是bug也没折
 
重大突破,参考李维的<<分布式多层系统>>

解决了 在ClientDataSet 下已经解决了多表查询,单表更新的问题:
设置:
DataSetProvider.UpdatModel= upWhereKeyOnly;
DataSetProvider.ResolveToDataSet=false;




主要是在DataSetProvider的on1BeforeUpdateRecord事件上处理
一下Delta 字段的ProviderFlags属性;

procedure TfrmVend.DataSetProvider1BeforeUpdateRecord(Sender: TObject;
SourceDS: TDataSet; DeltaDS: TCustomClientDataSet;
UpdateKind: TUpdateKind; var Applied: Boolean);
var
i:Integer;
begin
inherited;
for i:= 0 to DeltaDS.RecordCount-1 do
begin
DeltaDS.FieldByName(关键字段).ProviderFlags:=
DeltaDS.FieldByName('关键字段').ProviderFlags + [pfInKey];
DeltaDS.FieldByName('不需要更新的字段').ProviderFlags:=[];
end;

end;


现在我的心病就是这个问题:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3468703
希望兄弟们帮帮我啊!
如果ClientDataSet的这个中文过滤缺陷解决了。
我就花心思处理Ehlib在数据集为ClientDataSet的情况下各种功能的完善,并很快公布出来。
因为过滤功能是Ehlib最大的亮點。如果过滤有问题,这个Ehlib就失去其最閃亮的地方。
 
借这个热贴,想再和大家完善一下DBgrideh
我们在设计表单的时候,明细部分一般都要用到 商品信息,

这个信息就是在DataSet上加一个lookUp类型的字段,
通过下拉出商品信息进行维护,
下拉出的DbgridEh也有右键菜单,但是一点DbGridEh就消失,后来我改写
dblookupeh.pas 里对下拉dbgrideh的初始化进行修改,让它默认把过滤行显示出来。

这下虽然能够过滤了,但是过滤后,程序就死掉了。

原创开发者,没有想到下拉的信息最关键的是要能够过滤啊。

希望大家奉献计策。 我继续完善ehlib。
 
kinneng 兄弟。

我记得您做过degirdeh的那种下拉效果,可以按照多个字段查找,而且可以按助记码 查找,功能特别强大,希望能把那段核心的代码开发给我。

下面是我做的下拉效果演示:
http://www.daizhicun.com/dmx/pic/king.JPG
 
我的控件4万行代码,这部分的核心代码有万多行,说说具体要那个细节
 
最近我简单研究了一下ExpressQuantumGrid 下的 CxGrid ,发现功能太强了。
主要是分组功能是Ehlib下的 DBgridEh所没有的。
其他也有很多方面做得非常不错。


但是cxGrid,有两个缺点:
1、cxGrid的每个字段要设置,这个就非常麻烦。我们经常是一个Grid上要显示40多个字段,每个字段都要设置,就非常麻烦。而delphi自带的Dbgrid或者Ehlib里的DbgridEh就只要连接datasource就可以。里面的字段可以不要设置;
如果每个字段都要设置好,缺点太多,大大降低开发效率,而且万一DataSet的sql语句发生变化,还要修改设置,真的非常非常的麻烦;

2、据说CxGrid在记录多的时候速度非常慢。而DBGridEh就比它好的多。
这其实是我最关心的,不管CxGrid做得如何功能强大,界面如何漂亮,
如果在多记录的时候(一般显示1~2万条记录我想应该是常见的),太浪费时间。
那么一切都等于0


这几年我一直研究DBgridEh,可是一看到CxGrid这么强劲,感觉自己这么多年是否白研究了。
希望大家来讨论一下使用 这两个Grid的感受。
 
青云,你好
我一直在使用你修改的3.4版本的控件,感觉很不错的。
grideh只不过是显示数据的界面而已,没必要那么花哨。
我感觉CXgrid的很多功能用不上,因此之后就放弃了。
希望你坚持下去,把这个控件修改得更完善
能否把带查询功能的高版本发出来?
谢谢
wdejun@163.com
 
.Net 第三方DevExpress 的Grid里面的功能也很多.
而且对于本地化也比较容易扩展.等等.
反正给我的感觉不管DBgridEh ,XGrid,DevExpress 够用还有扩展性好就可以了.
 
刚才测试了一下,3万条记录 , 数据集一直开着.
让DbgridEh的DataSouce 断了再连上,需要时间 几乎没有.
用 cxGrid ,把它的DataSouce 断了再连上,需要大概 2,3秒 的时间.

不过cxGrid 的过滤有个优点,它没有依赖其DataSet的过滤,它是个独立的过滤.

这个功能很不错,因为用 DbGrid 或者 DbGridEh的过滤必须依赖其DataSet,可是DataSet的过滤是有问题的,比如用 ClientDataSet ,它模糊过滤中文有很严重的问题;
用AdoDataSet,它过滤的时候,对 and ,or 的组合关系有特殊的要求.
总之 ,delphi的dataSet的过滤用起来就是问题多多.


对于dbgrideh,我会继续完善.

不过cxGrid在 delphi 和c#.net 都有,通用性很强.
在delphi里研究好了cxGrid,在.net 下使用的时候,就不要怎么研究了.


下一个delphi的项目打算用cxGrid ,并做cxGrid的改良.
 
我是楼主 ,借这个热贴 问问大家一个看是简单的问题:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3563107
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部