function f(mOwner: TCompoent): Boolean;
var
  I: Integer;
begin
  for I := 0 to mOwner.ComponentCount - 1 do
    if mOwner.Components[I] is TDBGrid then begin
      TDBGrid(mOwner.Components[I]).DataSource := nil; //???????
    end;
end;

解决方案 »

  1.   

    同上了
    只找界面上的DBGRid就可以了。 
      

  2.   

    Component.ClassName 是 TDBGrid等类名
      

  3.   

    关注中
    ================================================================CSDN 论坛助手 Ver 1.0 B0402提供下载。 改进了很多,功能完备!★  浏览帖子速度极快![建议系统使用ie5.5以上]。 ★  多种帖子实现界面。 
    ★  保存帖子到本地[html格式]★  监视您关注帖子的回复更新。0D
    ★  可以直接发贴、回复帖子★  采用XML接口,可以一次性显示4页帖子,同时支持自定义每次显示帖子数量。可以浏览历史记录! 
    ★  支持在线检测程序升级情况,可及时获得程序更新的信息。
    0A
    ★★ 签名  ●  
         可以在您的每个帖子的后面自动加上一个自己设计的签名哟。Http://www.ChinaOK.net/csdn/csdn.zip
    Http://www.ChinaOK.net/csdn/csdn.rar
    Http://www.ChinaOK.net/csdn/csdn.exe    [自解压]
      

  4.   

    形参中可以传递类名吗,我想不光是找TdbGrid,或者还有其它的如TdbTree等,在共用函数中设定想找的类即可得到该组件的name;
    function f(mOwner: Tform; aclass: Class): Boolean;
    with mowner do
    ....
    components[i] is aclass then
      

  5.   

    传递类为参数已经没问题了。现在主要是我在一个共用单元中已经取得不同的表格的数据源,但该共用单元中不包括dbGrid组件,我想在共用单元中使用insert。在包括dbGrid的窗体中自定义一个过程,protableinsert()来对不同表格的dataset中的字段来进行编辑。但是自定义的过程却不能激活
      

  6.   

    还是慢了一点,就是用Tcomponent的name 和classname的属性