Delphi实现DBGridEh复选框

一、数据库中增加一个字段

  1. 给数据库中增加一个字段(sqlserver:bit类型,oracle:char(1)类型),值为0或1。
  2. DBGridEh表格中列属性CheckBoxes设置为True,将KeyList设置为0和1.。
  3. 设置完成,点击复选框,即可选中与取消选择,同时数据库中的该字段值也对应改变。
  4. 设置DBGridEh表格中的OnTitleClick函数,点击表头,实现全选与全消。

具体实现:
增加字段
在这里插入图片描述
设置复选框
在这里插入图片描述
设置KeyList
在这里插入图片描述
点击单元格选择
在这里插入图片描述
数据库同步字段值修改
在这里插入图片描述
全选
在这里插入图片描述
全消
在这里插入图片描述

点击表头全选全消事件源码

procedure TForm1.dbgrdh1TitleClick(Column: TColumnEh);
var i:integer;
begin
  if column.Index=0 then
  begin    //验证是否第一列
    qry1.First;                //游标回滚
    dbgrdh1.SelectedRows.CurrentRowSelected:=true;    //第一行被选中

    if trim(column.Title.Caption)='全选' then
    begin
      for i:=0 to dbgrdh1.DataSource.DataSet.RecordCount-1 do
      begin
        dbgrdh1.Fields[0].DataSet.edit;
        dbgrdh1.Fields[0].Value := '1';
        dbgrdh1.Fields[0].DataSet.post;
        dbgrdh1.datasource.dataset.next;
      end;
      column.Title.Caption:='全消';
    end
    else
    begin
      for i:=0 to dbgrdh1.DataSource.DataSet.RecordCount-1 do
      begin
        dbgrdh1.Fields[0].DataSet.edit;
        dbgrdh1.Fields[0].Value := '0';
        dbgrdh1.Fields[0].DataSet.post;
        dbgrdh1.datasource.dataset.next;
      end;
      column.Title.Caption:='全选';
    end;
    qry1.First;    //游标回滚
    dbgrdh1.SelectedRows.CurrentRowSelected:=true;  //选中第一行
  end;
end;

注意:在设置DBGridEh中的数据源时候,最好一列一列绑定对应数据库中的字段,不要自动默认显示数据库中数据,不然的话,会发现在对象属性控制板块修改的数据无法保存,运行之后无效。

二、数据集中增加一列

  1. 数据库连接顺序:ADOConnection ->ADODataSet->DataSetProvider->ClientDataSet->DataSource->DBGridEh
  2. 设置DataSetProvider->Options->poAllowCommandText属性为True
  3. 设置点击按钮事件btn1Click,获取数据,给数据集中增加一列复选框
  4. 设置点击单元格事件dbgrdh1CellClick,实现选中或未选择

效果如下:
在这里插入图片描述

实现代码

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, ADODB, Grids, DBGridEh, StdCtrls, DBClient, Provider;

type
  TForm1 = class(TForm)
    dbgrdh1: TDBGridEh;
    con1: TADOConnection;
    ds1: TADODataSet;
    dtstprvdr1: TDataSetProvider;
    ds2: TClientDataSet;
    ds3: TDataSource;
    btn1: TButton;
    procedure dbgrdh1CellClick(Column:TColumnEh);
    procedure btn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

//获取数据,新增一列
procedure TForm1.btn1Click(Sender: TObject);
var
  i:Integer;
  sqlStr:string;
begin
  sqlStr:='select * from student';
  with ds2 do
  begin
    Active:=False;
    Fields.Clear;
    CommandText:=sqlStr;
    FieldDefs.Update;
    with TFieldDef(FieldDefs.Insert(0)) do
    begin
      Name:='TempCol';
      DataType:= ftBoolean;
    end;
    for i:=0 to FieldDefs.Count-1 do
      FieldDefs[i].CreateField(ds2);
    Fields[0].FieldKind:=fkInternalCalc;
    Execute;
    Active:=True;
    end;
    with dbgrdh1 do
    begin
      Columns[0].Checkboxes:=True;
      Columns[0].KeyList.Clear;
      Columns[0].KeyList.Add('1');
      Columns[0].KeyList.Add('0');
      Columns[0].AlwaysShowEditButton:=True;
    end;
  end;

//点击单元格,实现选中或未选中
procedure TForm1.dbgrdh1CellClick(Column: TColumnEh);
begin
  if Column.FieldName='fselect' then
  begin
    ds1.Edit;
    if ds1.FieldByName(Column.FieldName).AsString ='1'
    then
      ds1.FieldByName(Column.FieldName).AsString:='0'
    else
      ds1.FieldByName(Column.FieldName).AsString:='1';
    ds1.Post;
  end;
end;

end.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值