DBGRID自定义数据字段显示(导出)实现一例

 DBGRID自定义数据字段显示(导出)实现一例

 

在同城系统开发实践中,碰到这样的一种情况,对于相同的数据集,有的区局需要将该数据集导出到EXCEL,但各自需要不同的字段。当然,我们可以在程序中针对各个区的网点编号来设置字段的属性来控制其显示或导出,但程序显得僵硬化,不利于程序的修改。在这里,我提供了一种方法,可以将要显示的字段以菜单的形式加以控制,并以配置文件的形式记录你的个性要求,灵活地控制数据集合的显示或导出字段。

程序分为以下步骤进行:

一、查询数据,动态生成控制菜单。

procedure Tc_BKPenaltyFrm.InitMenuItem;

var

  NewItem: TMenuItem;

  i: integer;

begin

  PopupMenu6.Items.Clear;

  for i := 0 to DBGrideh3.Columns.Count - 1 do

  begin

    NewItem := TMenuItem.Create(nil);

    NewItem.Caption := DBGrideh3.Columns.Items[i].Title.Caption;

    NewItem.OnClick := MenuOnClick; //添加弹出菜单子项的方法

    NewItem.Checked := true;

    PopupMenu6.Items.Add(NewItem);

  end;

end;

二、读取配置文件,控制数据字段属性

procedure Tc_BKPenaltyFrm.SetFromIni;

var

  Listini: Tinifile;

  list: string;

  ts: Tstringlist;

  i: integer;

begin

  //读入非显示字段的下标列表。

  try

    Listini := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'ini/config.ini');

    list := Listini.ReadString('explist', 'list', '');

  finally

    Listini.Free;

  end;

  ts := TStringList.Create;

  ts.Delimiter := ',';

  ts.DelimitedText := list;

//按列表内容,控制字段的属性

  for i := 0 to ts.Count - 1 do

  begin

    PopupMenu6.Items[StrToInt(ts[i])].Click;  //触发菜单单击事件

  end;

end;

 

//菜单单击,控制显示

procedure Tc_BKPenaltyFrm.MenuOnClick(Sender: TObject);

begin

  inherited;

  TMenuItem(Sender).Checked := not TMenuItem(Sender).Checked;//取反

  SetToIni;  //写入配置文件

  DBGridDisplayInf;//控制字段属性

end;

 

//控制菜单项对应的字段属性,决定显示或导出的属性

procedure Tc_BKPenaltyFrm.DBGridDisplayInf;

var

  i: integer;

begin

 

  for i := 0 to PopupMenu6.Items.Count - 1 do

  begin

    if not PopupMenu6.Items[i].Checked then

    begin

      DBGrideh3.Columns.Items[i].Visible := false;  //不显示

      DBGrideh5.Columns.Items[i].Visible := false;

DBGrideh5.DataSource.DataSet.FieldByName(DBGrideh5.Columns.Items[i].Title.Caption).Tag := 1;//该属性控制导出EXCEL时该字段不导出

    end

    else

    begin

      DBGrideh3.Columns.Items[i].Visible := true; //显示

      DBGrideh5.Columns.Items[i].Visible := true;

DBGrideh5.DataSource.DataSet.FieldByName(DBGrideh5.Columns.Items[i].Title.Caption).Tag := 0; //该属性控制导出EXCEL时该字段时导出

    end;

  end;

end;

 

//写入配置文件。

procedure Tc_BKPenaltyFrm.SetToIni;

var

  Listini: Tinifile;

  list: string;

  i: integer;

begin

//遍历菜单项,把所有非选的项目的下标添加到List里面。

  for i := 0 to PopupMenu6.Items.Count - 1 do

  begin

    if not PopupMenu6.Items[i].Checked then

    begin

      list := list + inttostr(i) + ',';

    end;

  end;

 

  list := copy(list, 1, length(list) - 1);

  //把非选的项目写入配置文件。

try

    Listini := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'ini/config.ini');

    Listini.WriteString('explist', 'list', list);

  finally

    Listini.Free;

  end;

 

end;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值