对于dbgrid控件,想实现如下功能
功能一:窗口1 加入一个dbgrid ,dbgrid中引用数据源的一个lookup型字段 ,
比如主键是编号,显示为员工姓名,
员工信息在另外一个窗口2中管理,增加了员工信息之后,窗口1那个dbgrid的lookup字段没有做到更新,如何能够使到dbgrid的lookup字段自动更新。功能二:要处理一些数据,如何能够使到用户在dbgrid中选择那些数据准备处理,比如用一个checkbox之类的东西让用户选择

解决方案 »

  1.   

    在窗口2关闭之后,重新打开一下dbgrid的数据源
      

  2.   

    第一个问题:
           当你在form2中新增一条纪录的以前, 你要在db中判断你的主健当前
     最大的编号,然后加一当做将新增纪录的编号.如原lookup最大的编号是10,那么
    一个就是11了,
           在form2中insert 这笔纪录到db以后. 您的form2就要关闭了,fomr2.close的时候, 您要让form1.dbgrid所连接的query控件刷新
     query.close;
     query其它如果有条件
     query.open; 
    这样您的form1.dbgrid得到的就是新的数据了
    如果再加上form1. DBGrid1.DataSource.DataSet.Locate('lookup',11,[loCaseInsensitive,loPartialKey ]);
    dbgrid就可以得到您在form2中添加数据的焦点2: 你可以在combobox中写一些条件. 在他的change事件中,如果条件
    改变的时候,你做一些动作. Dbgrid显示满足条件的纪录.就ok.
      

  3.   

    问题1可以解决了
    现在关键的式问题2
    如何用dbgrid控件方便的记录那些记录被选中???
    我尝试过用calcalated boolean 类型字段,但是checkbox是有了,但是都是只读,
    另外我想,如果能够实现用户选择的记录能够以不同颜色显示出来那就最好不过了,我看到有些软件可以这样,理论上这个式可行的
      

  4.   

    http://expert.csdn.net/Expert/topic/2410/2410688.xml?temp=.8491938
    上面有的要的答案!!
      

  5.   

    里边的文章看不懂,其实关键的一个问题就是在客户端创建一个临时的field,它编辑的数据不提交到数据库的
      

  6.   

    计算字段怎么是只读的?不可能,我就用一个计算字段来表示记录是否被选中,不过计算字段的值是需要你自己赋的。
    记录用不同的颜色显示也简单,根据你的计算字段的不同值,你可以在DBGrid1CustomDrawCell(Sender: TObject;
      ACanvas: TCanvas; ARect: TRect; ANode: TdxTreeListNode;
      AColumn: TdxTreeListColumn; ASelected, AFocused, ANewItemRow: Boolean;
      var AText: String; var AColor: TColor; AFont: TFont;
      var AAlignment: TAlignment; var ADone: Boolean)事件中自定义CELL的颜色
      

  7.   

    还有你的计算字段的类型应该是kInternalCalc,不然不在显示范围的记录的计算字段的值会被清空的。