cxgrid根据数据库表字段动态生成列
如果根据一般用法是通过自己增加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 *)
是转换时出错还是其他问题?
谢谢