我做了一个组件,有一个DataSource属性,设置好DataSource属性后,发现DataSource的dataset属性取不出来,相关代码如下:
procedure TAISMDBComboBoxCode.SetbtnDataSource(ADataSource: TDataSource);
begin
  if ADataSource <> btnDataSource then
  begin
    if Assigned(FAISMCodeBtn) then
    begin
      FAISMCodeBtn.DataSource := ADataSource;   ******
      if (ADataSource <> nil) and (ADataSource.DataSet <> nil) then ??????
      begin
        FCloneDataSet.CloneCursor(TClientDataSet(ADataSource.DataSet), false, false);
        if FCloneDataSet.Active then ReloadData;
      end
      else FCloneDataSet.RemoteServer := nil;
    end;
  end;
end;
????这行的ADataSource.DataSet一直为空,而*****这样FAISMCodeBtn获取DataSource可以取出dataset,请问这是什么原因啊?

解决方案 »

  1.   

    想到一点,大家看看有没有道理,在这个函数运行的时候是程序刚开始运行的时候,是不是那些datasource和dataset还没有创建好,或者上datasource和dataset之间的对应关系没有建成呢?
    这样的话,在判断ADataSource.DataSet <> nil的时候就空了,而通过FAISMCodeBtn.DataSource获取dataset实在程序运行起来后,点击 AISMCodeBtn出发的函数中运用到的,在这个时候datasource和dataset已经创建好并且上datasource和dataset之间的对应关系已经建成,这样的话dataset属性就能取出来了啊?
      

  2.   

    你传参数的时候ADataSource的dataset有值吗?
      

  3.   

    楼上的,我传的时候已经全设置好的啊,有dataset属性的
      

  4.   

    你在执行那段代码时,DELPHI还没有给值(如在,在控件的CREATE方法中,是取不到你的属性所设置的值的,在Loaded中就可以)
      

  5.   

    都是高人啊!我不会写组件!来凑个热闹!ADataSource 是什么啊?这样写组件合适吗?
      

  6.   

    呵呵,还是yangs1295118971(杨姬轩) 和楼主说的有道理