在主表单(非MDI)中使用一个pagecontrol, 每打开一个子窗口就添加一个tabsheet, 将子窗口显示在tabsheet中.每个tabsheet中有若干数据敏感控件, 有些是查询, 有些是修改. 问题是当修改数据库后
如何将这些数据敏感控件内容刷新.

解决方案 »

  1. 1、如楼上所言。
    2、将子窗口与tabsheet设为同一数据源
      SubForm.DataSource:=tabShett.DataSource;
      

  2. to liufuyahong:
    -----------------------
    你的delphi版本是多少?我用的delphi7to luxuewei5214:
    -----------------------
    我用的TQueryto NightCloud()
    --------------------------
    我自己的程序
      

  3. 可以这么做:
    1、设置一个全局bool变量数组,假设为bchanged,有多少个tabsheet,数组元素就有多少个。标志是否有数据变更,每次数据变更就置所有的bchanged数组元素为真
    2、在每个tabsheet的onshow事件中判断对应的bchanged[i]是否为真,如果为真,刷新数据,然后置对应的bchanged[i]为false。
    没有具体想,上面方法有些原始。应该可以使用notify模式的思想来实现
      

  4. 如果用的是同一个Connection  同一个Source 则修改后会直接改变的。最好用同一个,不行的话Refresh;
      

  5. 提示:
    1: 本地数据库, 不过我想网络数据库是一样的
    2: 我知道打开再关闭可以刷新对于clientdataset,dataset,怎么刷新我还是知道的.问题是如何将若干个tabsheet里的dataset刷新
      

  6. 我想用findcomponent.class is tdataset不知道行不行,试以下
      

  7. 遍历所有对象,是query的就刷新
    for i:=0 to componentcount -1 do
      

  8. 你的dataset是放在子窗口中的吧?
      

  9. //使用以下过程绝对OK!
    procedure TForm1.RefreshDataSet;
    var
      i:Integer;
    begin
      for i:=0 to ComponentCount-1 do
      begin
        if Components[i] is TDataSet then
        begin
          with Components[i] as TDataSet do
          begin
            if Active then
            begin
              Active:=False;
              Active:=True;
            end;
          end;
        end;
      end;
    end;
      

  10. //你看看Open和Close的过程内容就发现(^_^):
    procedure open;
    begin
      Active:=True;
    end;
    procedure open;
    begin
      Active:=False;
    end;
      

aliyun

类似问题 »