1\请问对于一个DBGRID显示的数据,我要双击其中一条可以打开那条记录的详细信息或可以删除那条记录,那怎么样识别当前显示的是哪一条记录,或说双击那条怎么样可以读出那条记录的主键值(如有个ID,怎么样可以读出那条记录的相应ID)2\请问一下,DBGRID控件除了用绑定到datasource显示数据外,还能用代码来动态编写吗?如我用一个ADO查出一张表的记录到一集录集中,然后有循环方式把每条记录显示在DBGRID中,并用代码设置好每个字段的标题和其对应字段的方式?怎么实现呀.
3\DBGRID显示的数据时可以分页显示吗?如果一张表中有非常多数据,如都是一次性显示到DBGRID上的话,那用户不是要等很长时间?

解决方案 »

  1.   

    问题1:DBGrid经DataSource与 Data set数据集控件(如TTable,TAdoTable,TAdoQuery)相联,在DBGrid中选中某行,滚动行而改变当前行,对应的如TAdoTable数据集控件会同步指向到该行要获取当前行的某个字段的值,很方便,如var 
      i:integer;  i:= AdoTable.FieldByName('id').AsInteger;问题2:一般来说,这样的话,建议换个控件如TStringGrid
    问题3:
    从显示数据所占用的时间来说,这个不算太多, 比如需要注意的是每次查询返回的数据集有多少行
    可以控制每次查询返回的最高行数来解决吧.像多层的分布式中,使用ClientDataSet1时,有个属性PacketRecords 就是设置每次最多返回多少条记录.当在DBGrid中滚到末尾需要再显示之后的数据时,ClientDataSet1会自动向中间层服务器查询返回接下来的数据这个在多层分布式结构中,对于网络传输压力有很大的帮助当然如果不使用这种方式的应用中,可以考虑别的方法
      
      

  2.   

    一句话,谢谢你
    上面答案中还有两个小小问题,如能补答一下更是感谢:1\
    AdoTable.FieldByName('id').AsInteger和AdoTable.FieldByName('id').values有什么区别,有些地方是写:AdoTable.FieldByName('id').values;2\TStringGrid是在哪里找呀,好象Data Controls 下面没有找到这个控件