Intraweb动态生成IwDbGrid

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;

发表评论