起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 274|回复: 16

【结贴】DataGrid绑定数据源报错**

[复制链接]
发表于 2008-10-30 15:16:32 | 显示全部楼层 |阅读模式
如图。
一个TClientDataSet、一个TDataSource一个DataGrid
如何让其显示呢。
我用DataSet.CreateDataSet报错

2008-10-30 15-10-59.gif

12.45 KB, 下载次数: 149

回复

使用道具 举报

发表于 2008-10-30 15:43:15 | 显示全部楼层
有了上面的dataset:=Tclientdataset.create(nil);
CreateDataSet是不需要的。
看delphi的例子:
procedure TForm1.FormCreate(Sender: TObject);
begin
  with ClientDataSet1 do
  begin
    with FieldDefs.AddFieldDef do
    begin
      DataType := ftInteger;
      Name := 'Field1';
    end;
    with FieldDefs.AddFieldDef do
    begin
      DataType := ftString;
      Size := 10;
      Name := 'Field2';
    end;
    with IndexDefs.AddIndexDef do

    begin
      Fields := 'Field1';
      Name := 'IntIndex';
    end;
    CreateDataSet;
  end;
end;
回复 支持 反对

使用道具 举报

发表于 2008-10-30 15:45:38 | 显示全部楼层
不要在create事件上做,换一个吧,
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-30 16:52:18 | 显示全部楼层
哦 如果不用CreateDataSet 如何 让DataGrid 显示DataSet的列?
回复 支持 反对

使用道具 举报

发表于 2008-10-30 17:01:51 | 显示全部楼层
楼主,我简单做了一个测试,没有什么问题
界面部分:
object Button1: TButton
  Left = 136
  Top = 248
  Width = 75
  Height = 25
  Caption = #21019#24314
  TabOrder = 0
  OnClick = Button1Click
end
object DataGrid1: TDataGrid
  Left = 48
  Top = 64
  Width = 480
  Height = 160
  Bands = <
    item
    end>
  HeaderPanelRowCount = 1
  TabOrder = 1
  TreeLineColor = clGrayText
  ShowIndicator = True
  Filter.Criteria = {00000000}
  SummaryGroups = <>
  SummarySeparator = ', '
end
object Button2: TButton
  Left = 232
  Top = 256
  Width = 75
  Height = 25
  Caption = 'Button2'
  TabOrder = 2
end

代码部分:
unit MainForm;

interface

uses
  Business.System, Business.Forms, Business.Data;

type
  TMainForm = class(TForm)
    Button1: TButton;
    DataGrid1: TDataGrid;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure BizFormCreate(Sender: TObject);
    procedure BizFormDestroy(Sender: TObject);
  private
    {private declarations}
    clDataSet : TClientDataSet;
    ds : TDataSource;
  public
    {public declarations}
  end;

implementation


procedure TMainForm.Button1Click(Sender: TObject);
begin
  try
    clDataSet.FieldDefs.Add('ProjectCode',TFieldType.ftString,20,True);
    clDataSet.FieldDefs.Add('ProjectName',TFieldType.ftString,50,True);
    clDataSet.CreateDataSet;

    clDataSet.Close;
    clDataSet.Open;

    clDataSet.Append;
    clDataSet.FieldByName('ProjectCode').AsString := '1';
    clDataSet.FieldByName('ProjectName').AsString := '111111';
    clDataSet.Post;

    DataGrid1.DataSource := ds;
    ds.DataSet := clDataSet;
  finally
  end;

end;

procedure TMainForm.BizFormCreate(Sender: TObject);
begin
  clDataSet := TClientDataSet.Create(nil);
  ds := TDataSource.Create(nil);
end;

procedure TMainForm.BizFormDestroy(Sender: TObject);
begin
  ds.Free;
  clDataSet.Free;
end;

执行后的效果图

snap11.png

7.08 KB, 下载次数: 140

回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-30 17:07:01 | 显示全部楼层
我换用了TUserDataSet,添加数据字段,数据集的字段还是0
var
  bizField:TUserDataField;
begin
  DataSet.Free;
  DataSet:=TUserDataSet.Create(self);

  bizField:=TUserDataField.Create(DataSet);
  bizField.ID:='ProjectCode';
  bizField.DisplayName:='项目';
  bizField.DataType:=TDatatype.dtString;
  bizField.Size:=20;


    jsDialogs.showmsg(SysUtils.IntToStr(DataSet.BizFields.Count),'');//这个结果是0,是不是哪里不对了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-30 17:11:51 | 显示全部楼层
TClientDataSet可以接收ExcelToTable的数据么,如用5楼的代码,如何做数据字段映射
回复 支持 反对

使用道具 举报

发表于 2008-10-30 17:31:30 | 显示全部楼层
回6楼,动态创建用户数据集,我也做了测试,没有什么问题
procedure TMainForm.Button2Click(Sender: TObject);
var
  lBizField: TBizField;
begin
  try
    lBizField := TUserDataField.Create(usDataSet);//创建用户数据字段
    lBizField.DataSet := usDataSet;      //指定字段所在的数据集
    //设置字段ID
    lBizField.ID := 'ProjectCode';
    lBizField.DataType := TDataType.dtString;          //设置字段类型
    lBizField.Size := 32;                            //设置字段大小
    //设置字段显示名称
    lBizField.DisplayName := '编号';

    lBizField := TUserDataField.Create(usDataSet);//创建用户数据字段
    lBizField.DataSet := usDataSet;      //指定字段所在的数据集
    //设置字段ID
    lBizField.ID := 'ProjectName';
    lBizField.DataType := TDataType.dtString;          //设置字段类型
    lBizField.Size := 32;                            //设置字段大小
    //设置字段显示名称
    lBizField.DisplayName := '名称';

    DataGrid2.DataSource := dsus;
    dsus.DataSet := usDataSet;

    usDataSet.Close;
    usDataSet.Open;

    jsDialogs.showmsg(SysUtils.IntToStr(usDataSet.BizFields.Count),'');//
  finally
  end;

end;
其中:
  usDataSet : TUserDataSet;//用户数据集
    dsus : TDataSource;

snap1111.png

9.64 KB, 下载次数: 127

回复 支持 反对

使用道具 举报

发表于 2008-10-30 17:33:55 | 显示全部楼层
回7楼,你可以试试。
建议楼主通过平台的用户数据集(TClientData是delphi自带的)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-30 17:38:02 | 显示全部楼层
谢谢楼上  我少用了个    lBizField.DataSet := usDataSet;      //指定字段所在的数据集
加上后正常了


在ExcetoTable使用的时候,如何定义才能导入到定义的用户数据集呢?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-25 10:45 , Processed in 0.045471 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表