思路一:
如何将dbgrid1 中查询出来的数据 ,按照需要整行拖拽到dbgrid2中,然后控制dbgrid2提交 到数据库中。dbgrid1和dbgrid2结构相同,用adoquery连接sql================================================
另一种思路:
或者单个dbgrid1中可以整行特殊标识出需要的数据,最后提交到数据库表中。==================================================大家给个代码的大概吧, 思路已经有了。

解决方案 »

  1.   

    第一个思路其实实现起来很简单。一个就是拖动的图标问题。如何实现拖动图标不用写了吧。
    拖动完成后写代码也很简单,就执行一个sql语句: insert into newtable values(select * from oldtable where id =?); 最后刷新grid2的adoQuery就行了吧。
    反正我超级不喜欢DBGrid控件。建议你能自己写就自己写。对于数据的输入问题,我宁可写一个单独的FORM,然后使用DBEdit来完成。因为DBGrid随便一输入,就涉及到N多的问题,什么BeforePost,AfterPost,什么乱七八糟的。恶心死了。而且如果想写颜色更改,整行选择,以及加Checkbox等等等等,能把你写死掉。我一般使用dxTreeList控件,又清爽,又简单,又能排序,什么都在自己的控制中。就是修改的时候麻烦一点。当然,使用数据的操作方式不同,有人就喜欢直接在grid中改,也挺简单的就是了。
    第二个问题也是一个sql语句的问题。
    首先就是选中。你随便写,就是一个Color的问题。点击一个记录改颜色,再点击该记录再改回来。就完成选中的功能了。不过改颜色恶心死你就是了。因为你要想办法记住要更改颜色的记录。
    然后记住记录的ID(如果有ID的话,应该有)后,执行Sql语句:
    insert into newtable select * from oldtable where id in(1,2,3,4,5,8……)就行了。
    反正很恶心就是了。不难,和烦
      

  2.   

    to:老猪
    第一个,因为是多表联合查出的数据用dbgrid查出来的
    第2个,拖动后,在dbgrid2中要能整行删除,添加,最后确定了才能提交。
    后面的改颜色我曾经也试验过,可是,如何记住标记了颜色的记录不简单啊我见过又人做出过,不过没有源代码
      

  3.   

    使用DBDemos的Country表。当面积超过100000时,将整行显示为红色。
    首先设置DBGrid的DefaultDrawing属性设置为False。然后在DBGrid的OnDrawDataCell事件写如下代码:
    var
      c: TColor;
    begin
      c:=DBGrid1.Canvas.Brush.Color;     //保存原来的颜色。
      if Table1.FieldByName('Area').AsInteger>1000000 then  //如果面积超过1000000,则将整行设置为红色
      DBGrid1.Canvas.Brush.Color:=clRed else
      DBGrid1.Canvas.Brush.Color:=c;
      DBGrid1.DefaultDrawDataCell(Rect, Field, State);
    end由于是整行更改颜色,因此省事的做法是跟Table,因为没有办法来保存标记。呵呵……。凑合用吧
      

  4.   

    哦。搞错了。原来改颜色已经搞定了。呵呵……。
    建议你使用devExpress控件组,里面有一个TMemData控件,是在内存中建立虚拟表的功能。你把数据拖动到DBGrid2中的时候,把拖动的数据添加到TMemData控件中就可以了。当然DBGrid2的DataSource的DataSet要使用TMemData控件。这个控件和Table控件一样,不过就是在内存中虚拟一个表而已。
    最后检查TMemData中的数据,想删除就删除,想提交就提交。
    对于标志数据的问题,因为你是Query交叉搜索出来的。因此就比较麻烦了。
    因此你只能做一个变量,来保存所有选择的数据。一般情况下用动态数组,或者其他的,保存你选中的数据的某个字段值(一般应该是ID,每个表都应该有的),然后在OnDrawData的时候检查是否是标志的数据。如果是,则改颜色。
    很麻烦就是了。