要现实一个动态列的Grid.  
 格式如下:
     行/列      2006-1-1   2006-1-2  2006-1-3 2006-1-4 2006-1-5    
      张三       XX
      李四       XX
      王五
       ..
       ..

解决方案 »

  1.   

    delphi自带的StringGrid就能实现了
      

  2.   

    很简单啊,把你的关联数据表的SQL修改一下就可以了,通过LEFT JOIN全部联在一起就行了
      

  3.   

    有一個控件,Dcube.ocx,可以滿足你
      

  4.   

    to pongjun64(迪安):
       Dcube.ocx 在哪有啊。在google,baidu上找不到啊。
      

  5.   

    下面是一个例子,是ACCESS数据库的,因为ACCESS不支持连续查询,所以多次操作,看看代码吧var
      I, BCount: Integer;
      ADQB: TADOQuery;
    begin
      ADQB:=TADOQuery.Create(Self);
      try
        ADQB.Connection:=DataLand.HomeConn;
        ADQB.SQL.Add('SELECT DISTINCT BNAME FROM MULTIHEADREPT ORDER BY BNAME');
        ADQB.Open;
        BCount:=ADQB.RecordCount;
        with TADOQuery.Create(Self) do
        try
          Connection:=DataLand.HomeConn;
          SQL.Add('CREATE TABLE REPTLIST(STREET VARCHAR(50)');
          for I:=1 to BCount do
          SQL.Add(',S'+IntToStr(I)+'Q1 FLOAT,S'+IntToStr(I)+'Q2 FLOAT,S'+IntToStr(I)+'Q3 FLOAT');
          SQL.Add(')');
          ExecSQL;
        finally
          Close;
          Free;
        end;
        with TADOQuery.Create(Self) do
        try
          Connection:=DataLand.HomeConn;
          SQL.Add('INSERT INTO REPTLIST(STREET) SELECT DISTINCT STREET FROM MULTIHEADREPT');
          ExecSQL;
        finally
          Close;
          Free;
        end;
        with TADOQuery.Create(Self) do
        try
          Connection:=DataLand.HomeConn;
          for I:=1 to BCount do
          begin
            SQL.Clear;
            SQL.Add('SELECT STREET,SUM(Q1) AS SQ1,SUM(Q2) AS SQ2,SUM(Q3) AS SQ3 INTO SQ FROM MULTIHEADREPT WHERE BNAME='+QuotedStr(ADQB.FieldByName('BNAME').AsString)+' GROUP BY STREET');
            ExecSQL;
            SQL.Clear;
            SQL.Add('UPDATE REPTLIST,SQ SET S'+IntToStr(I)+'Q1=SQ1,S'+IntToStr(I)+'Q2=SQ2,S'+IntToStr(I)+'Q3=SQ3 WHERE REPTLIST.STREET=SQ.STREET');
            ExecSQL;
            SQL.Clear;
            SQL.Add('DROP TABLE SQ');
            ExecSQL;
            ADQB.Next;
          end;
        finally
          Close;
          Free;
        end;
        ADQ.Open;
        DBGEh.Columns.Clear;
        DBGEh.Columns.Add;
        DBGEh.Columns.Items[0].FieldName:='STREET';
        DBGEh.Columns.Items[0].Width:=96;
        ADQB.First;
        for I:=0 to BCount-1 do
        begin
          DBGEh.Columns.Add;
          DBGEh.Columns.Items[I*3+1].FieldName:='S'+IntToStr(I+1)+'Q1';
          DBGEh.Columns.Items[I*3+1].Title.Caption:=ADQB.FieldByName('BNAME').AsString+'|Q1';
          DBGEh.Columns.Items[I*3+1].Width:=72;
          DBGEh.Columns.Add;
          DBGEh.Columns.Items[I*3+2].FieldName:='S'+IntToStr(I+1)+'Q2';
          DBGEh.Columns.Items[I*3+2].Title.Caption:=ADQB.FieldByName('BNAME').AsString+'|Q2';
          DBGEh.Columns.Items[I*3+2].Width:=72;
          DBGEh.Columns.Add;
          DBGEh.Columns.Items[I*3+3].FieldName:='S'+IntToStr(I+1)+'Q3';
          DBGEh.Columns.Items[I*3+3].Title.Caption:=ADQB.FieldByName('BNAME').AsString+'|Q3';
          DBGEh.Columns.Items[I*3+3].Width:=72;
          ADQB.Next;
        end;
        with TADOQuery.Create(Self) do
        try
          Connection:=DataLand.HomeConn;
          SQL.Add('DROP TABLE REPTLIST');
          ExecSQL;
        finally
          Close;
          Free;
        end;
      finally
        ADQB.Close;
        ADQB.Free;
      end;
      

  6.   

    原理很简单1、取出所有列,你的就是日期
    2、建立动态临时表,字段数就是你取出的列数+名称列
    3、将数据以此导入临时表
    4、在Grid中动态添加列,列数就是表的字段数收工
      

  7.   

    to Hank(星星农场) :
       我要显示的不是数据而是进度条。而且 这个进度条可以拖动的。