cxgrid能不能象dbgrid一样,不用建立规定的字段,连接数据源后就直接显示,我是想用一个cxgrid动态的连接多个数据源。

解决方案 »

  1.   

    <转贴>cxGrid如何动态创建Items的Editor的项?
                          cxGrid的列有一个属性,它的编辑框可以指定combobox,spinedit等.在设计时,可以为
                          combobox的items添加项目.请问是否可以动态创建?(run-time时由程序加入)                   解决: 
                      var
                         A:TDataSource:
                         B:TcxlookupcomboboxProperties;
                             begin
                         A:=TDataSource.create(self);
                         B:=tcxlookupcomboboxproperties.create(self);
                         A.Dataset:=Dic_ry_xb;//此处指定数据源。
                         b.listdource:=a;//此处指明字段的listsource属性。
                         b.keyfieldnames:='a';    //此处指明字段的关键字段
                         b.listfieldnames:='b';   //此处指明字段的返回值。
                         b.listcolumns.items[0].caption:='x;  
                      //此处默认是会建立一个字段,但是显示的表头是name,所以此处让它显示为自己想要的中午显示。
                               cxGrid1DBTableView1c1_sex_code.Properties:=b;  
                      //此处指明是那个字段。
                       end;  //这个是初始化的代码,
      

  2.   

    给一段代码让你参考:  //显示Grid内容
      tvResult.BeginUpdate;
      tvResult.Bands.Clear;
      LeftBand := tvResult.Bands.Add;
      LeftBand.FixedKind := fkLeft;
      LeftBand.Options.Sizing := False;  RightBand := tvResult.Bands.Add;
      RightBand.Options.Sizing := False;  tvResult.ClearItems;
      tvResult.DataController.CreateAllItems;
      tvResult.EndUpdate;  tvResult.BeginUpdate;
      for i := 0 to tvResult.ColumnCount - 1 do
      begin
        GridColumn := tvResult.Columns[i];
        Field := GridColumn.DataBinding.Field;
        //手动设置PropertiesClass,以便使右键菜单出现'对齐'功能
        //Int型字段的PropertiesClass会自动设置为TcxMaskEditProperties
        case Field.DataType of
        ftString:
          begin
            GridColumn.DataBinding.ValueTypeClass := TcxStringValueType;
            GridColumn.PropertiesClass := TcxTextEditProperties;
          end;
        ftWideString:
          begin
            GridColumn.DataBinding.ValueTypeClass := TcxWideStringValueType;
            GridColumn.PropertiesClass := TcxTextEditProperties;
          end;
        ftInteger, ftAutoInc:
          begin
            GridColumn.DataBinding.ValueTypeClass := TcxIntegerValueType;
            GridColumn.PropertiesClass := TcxMaskEditProperties;
          end;
        ftSmallInt:
          begin
            GridColumn.DataBinding.ValueTypeClass := TcxSmallIntValueType;
            GridColumn.PropertiesClass := TcxMaskEditProperties;
          end;
        ftLargeInt:
          begin
            GridColumn.DataBinding.ValueTypeClass := TcxLargeIntValueType;
            GridColumn.PropertiesClass := TcxMaskEditProperties;
          end;
        ftFloat:
          begin
            GridColumn.DataBinding.ValueTypeClass := TcxFloatValueType;
            GridColumn.PropertiesClass := TcxMaskEditProperties;
          end;
        ftCurrency, ftBCD:
          begin
            GridColumn.DataBinding.ValueTypeClass := TcxCurrencyValueType;
            GridColumn.PropertiesClass := TcxCurrencyEditProperties;
            //货币字段统一显示4位小数
            TCurrencyField(Field).DisplayFormat := ',0.0000';
            //或者使用
            //TcxCurrencyEditProperties(GridColumn.Properties).DisplayFormat := '',0.0000';
          end;
        ftDateTime:
          begin
            GridColumn.DataBinding.ValueTypeClass := TcxDateTimeValueType;
            GridColumn.PropertiesClass := TcxDateEditProperties;
            //去除日期时间字段中的时间部分
            TDateTimeField(Field).DisplayFormat := 'yyyy-mm-dd';
          end;
        ftBoolean:
          begin
            GridColumn.DataBinding.ValueTypeClass := TcxBooleanValueType;
            GridColumn.PropertiesClass := TcxCheckBoxProperties;
          end;
        ftBlob:
          begin
            GridColumn.DataBinding.ValueTypeClass := TcxObjectValueType;
            GridColumn.PropertiesClass := TcxBlobEditProperties;
          end;
        else
          begin
            GridColumn.DataBinding.ValueTypeClass := TcxWideStringValueType;
            GridColumn.PropertiesClass := TcxTextEditProperties;
          end;
        end;
        //列标题 取最后一个'_'字符后的内容作为列标题
        ColumnTitle := GridColumn.Caption;
        if PosEx('_', ColumnTitle) > 0 then
        begin
          sl := FormMain.SplitString(ColumnTitle, '_');
          ColumnTitle := sl[sl.Count - 1];
          FreeAndNil(sl);
          if ColumnTitle = '' then
            ColumnTitle := GridColumn.Caption;
        end;
        GridColumn.Caption := ColumnTitle;
      end;
      tvResult.EndUpdate;  tvResult.BeginUpdate;
      for i := 0 to 2 do
      begin
        tvResult.Columns[i].Position.BandIndex := 0;
        tvResult.Columns[i].Position.ColIndex := i;
      end;  for i := 3 to tvResult.ColumnCount - 1 do
      begin
        tvResult.Columns[i].Position.BandIndex := 1;
        tvResult.Columns[i].Position.ColIndex := i - 3;
      end;  IniFileName := ExtractFilePath(Application.ExeName) + 'Layout\' + Self.Name + '.ini';
      if FileExists(IniFileName) then
        Self.tvResult.RestoreFromIniFile(IniFileName)
      else
        for i := 0 to Self.tvResult.Bands.Count - 1 do
          Self.tvResult.Bands[i].ApplyBestFit;
      tvResult.EndUpdate;