关于dbgrid和stringgrid,一直有个问题困绕着我,dbgrid能不能做到像stringgrid似的,按单元格取值,比如stringgrid1.cells[0,i]。用stringgrid时候,我连接数据集组件用个循环把数据写在stringgrid里面,比如要修改某些内容,然后再用个循环和update语句更新数据表,当然DBgrid只要readonly不为true,可以直接改数据的值,但我认为在DBGRID中直接改数据表的值不太好。现在我想做的是用dbgrid查询出数据集,然后新增一列,新增的列中有下拉按钮,选择一些值,都选完后,用个循环把这个新列的值存在数据表里,如果用stringgrid我知道怎么操作,用dbgrid是不是可行?
经常需要做一些数据项的判断,比如用dbgrid显示一些数据集,然后新增一列,嵌套个checkbox选择按钮,判断是与否,判断完后更新数据库,如果用DBgrid直接操作数据表也可以,但只能操作一个boolean字段,如果要同时更新几个地方,就不行了不知道我说明白没有,请高手赐教,非常感谢

解决方案 »

  1.   

    使用cxGrid 完全可以实现你的要求~~
      

  2.   

    "现在我想做的是用dbgrid查询出数据集,然后新增一列,新增的列中有下拉按钮,选择一些值,都选完后,用个循环把这个新列的值存在数据表里,如果用stringgrid我知道怎么操作,用dbgrid是不是可行? "
    这个你可以利用dbgrid中的picklist属性来实现,应该没有问题。

    经常需要做一些数据项的判断,比如用dbgrid显示一些数据集,然后新增一列,嵌套个checkbox选择按钮,判断是与否,判断完后更新数据库,如果用DBgrid直接操作数据表也可以,但只能操作一个boolean字段,如果要同时更新几个地方,就不行了

    这个没有太清楚,利用dbgrid直接录入修改数据时,用adoquery.insert,append,edit,post就可以了,如果要判
    断,可以在数据集的beforepost等事件中进行处理 
      

  3.   

    zxf_feng 没明白我的意思,PICKLIST是可以实现下拉框,但是必须得设置readonly为false,而且下来的值不能向combobox似的可以不让修改,它无法保证完整性,最重要的是picklist一次只能更新一个表,假如我要把新选择的值的字段同时存入另外一个表,就不行。举例:数据库中有A、B表
    A表字段
    id,name,description,unit,memo
    B表字段
    id,quantity,valuesC表
    id,newvaluesA表.ID=B表.ID=C表.idselect a.id,a.name,a.description,a.unit,b.quantity, b.values from a left join b on a.id=b.id假设我用adoquery 查询用dbgrid显示出来
    id,name,description,uint,quantity,values
    .. .... .....       ....   .....    ....我在dbgrid上新增加一个字段newvalue,这个字段用来填个数,当填完后点一个BUTTON把这个字段的值插入到C表的newvalues中,请问这时候得怎么写程序?     
      

  4.   

    我的理解:你的C表就是一个基础信息表,表A,B中的ID都是取自C表
    如果要保存数据,我觉得流程是,先要将数据存入C表,生成ID后,才能让A表与B表来引用这个ID。
    所以不如有新字段时,先保存到C表,然后再操作A与B表,将其分别操作。
      

  5.   

    你的意思我懂,我举例不是这个意思,是想说如何用个循环把dbgrid新加的一列newvalues的值保存在C表中,具体应用中可能还会同时保存在D表中,我只想知道这种循环怎么写?
    如果用stringgrid我知道怎么写
    比如:
    var i:integer
    begin
      for i:=0 to stringgrid.rowcount-1 do
      beggin
        close;
        sql.clear;
        sql.add('insert c(newvalues) values(:newvalues)');
        parameters.parambyname('newvalues').value:=stringgird.cells[6,i];
        exexsql;
      end;
    end;
    因为stringgrid能够取单元格的值,能够循环插入C表,如果用DBgrid有没有这种功能?