Intraweb 开发WEB应用,高效灵活,配合IWDbGrid控件,能快速处理大量的数据。
但每个界面都人工设计数据表格,还是相对费时费力,如能用上代码,在运行时动态生成表格,就能省去一大笔开发精力,让开发人员将更多的精力放到企业逻辑上去,放到功能的完善和扩展上去。
下面即是动态生成IWDbGrid的实际应用代码,可能会因为版本不同而有所不同。
procedure TfmsbShebei.setMyGrid();
var
i:Integer;
sField:String;
ftCurr:TFieldType;
begin
qArea.Open;
//获取并定义FixSql语句非管理员只能看到自已
UserSession.setFixSql(self.Name);
UserSession.sOldSql:=UserSession.sFixSql;
qMaster.Close;
qMaster.SQL.Text:=UserSession.sFixSql+' '+UserSession.sFixOrder;
qMaster.Open;
//定义表格和下拉过滤用栏位
with AdvGrid.Columns do
begin
//设计时有0,1,2,3栏
for i:=4 to qMaster.Fields.Count+3 do
begin
sField:=qMaster.Fields.Fields[i-4].FieldName;
ftCurr:=qMaster.Fields.Fields[i-4].DataType;
Qry5.Close;
Qry5.SQL.Text:='select top 1 * from msTblField where FieldName='+''''+sField+'''';
Qry5.Open;
Insert(i);
if (sField='ywID') or (sField='sbID') then
begin
Items[i].Visible:=false;
Continue;
end;
Items[i].ColumnHeaderAlignment:=taCenter;
Items[i].ColumnHeaderClick:=false;
Items[i].DataField:=sField;
Items[i].Title:=Qry5.fieldbyname('FieldDesc').AsString;
Items[i].Width:=Qry5.fieldbyname('ViewWidth').AsInteger;
if (ftCurr=ftFloat)or(ftCurr=ftBCD) then
begin
Items[i].Alignment:=taRightJustify;
Items[i].Editor:=edEditFloat;
end else if ftCurr=ftBoolean then
begin
Items[i].Alignment:=taCenter;
Items[i].ColumnType:=ctDataCheckBox;
Items[i].Editor:=edCheckBox;
end else if Qry5.FieldByName('bRead').AsBoolean then
begin
Items[i].Editor:=edNone;
end else Items[i].Editor:=edEdit;
//最后处理待定栏位
if (sField='sbType') then
begin
Items[i].Editor:=edCombo;
qTemp.Close;
qTemp.SQL.Text:='Select opValue from msOption where opType=''sbType'' order by ViewOrder';
qTemp.Open;
while not qTemp.Eof do
begin
Items[i].ComboItems.Add(qTemp.fieldbyname('opValue').AsString);
qTemp.Next;
end;
end else if (sField='netVend') then
begin
Items[i].Editor:=edCombo;
qTemp.Close;
qTemp.SQL.Text:='Select opValue from msOption where opType=''netVend'' order by ViewOrder';
qTemp.Open;
while not qTemp.Eof do
begin
Items[i].ComboItems.Add(qTemp.fieldbyname('opValue').AsString);
qTemp.Next;
end;
end;
end;
end;
end;