cxgrid根据数据库表字段动态生成列

weijie2722 2011-02-08 12:34:30
如果根据一般用法是通过自己增加sql,然后手动在控件上选择“create all columns",或者在tableview里面选择retrieve field来增加表中字段以及里面的数据。现在我想用代码方法来实现。
参考了一下http://blog.sina.com.cn/s/blog_5af239c10100kdtb.html所说的delphi代码。
begin
ADOQuery1.SQL.clear;
ADOQuery1.SQL.text:='select top 10 * from lx' ;
ADOQuery1.Open;
for i:=0 to ADOQuery1.fieldcount-1 do
begin
cxGrid1dbtableview1.CreateColumn;
cxGrid1dbtableview1.Columns[i].DataBinding.fieldname:=ADOQuery1.Fields[i].DisplayName;
cxGrid1dbtableview1.Columns[i].caption:=ADOQuery1.Fields[i].fieldname;
cxGrid1DBTableView1.Columns[i].width:=80;
end;
ADOQuery1.ExecSQL;
adoquery1.active:=True;
end;

我把它更改为c++代码,如下
qry1->SQL->Clear();
qry1->SQL->Text = sql;
qry1->Open();
for (i = 0; i == (qry1->FieldCount - 1); i++)
{
cxgrdbtblvwGrid1DBTableView1->CreateColumn();
cxgrdbtblvwGrid1DBTableView1->Columns[i]->DataBinding->FieldName =qry1->Fields[i]->DisplayName;
cxgrdbtblvwGrid1DBTableView1->Columns[i]->Caption = qry1->Fields[i]->FieldByName;
cxgrdbtblvwGrid1DBTableView1->Columns[i]->Width = 80;
}
qry1->ExecSQL();
qry1->Active = True;


而问题是它在
cxgrdbtblvwGrid1DBTableView1->Columns[i]->DataBinding->FieldName =qry1->Fields[i]->DisplayName;
cxgrdbtblvwGrid1DBTableView1->Columns[i]->Caption = qry1->Fields[i]->FieldByName;

这两句代码中出错
[BCC32 Error] Unit1.cpp(76): E2288 Pointer to structure required on left side of -> or ->*
Full parser context
Unit1.cpp(63): parsing: _fastcall TForm1::TForm1(TComponent *)


是转换时出错还是其他问题?
谢谢
...全文
188 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

1,178

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 数据库及相关技术
社区管理员
  • 数据库及相关技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧