TDBGrid设置“选择”字段

    当数据集有选择的时候,比如选择性打印,而且这种选择是随用户的主观意念决定时。在DBGrid上设置“选择”字段,就非常必要和非常有用了。
    在DBGrid上设置“选择”字段,操作如下:


    一、加入DB单元,因为要DB相关设置。
uses DB;

    二、在Table的字段设置一个可供选择的字段,例使用中文字段“选择”,属性:bit。

    三、显示Table的DBGrid中,将该字段设置为第1列,即DBGrid1.Columns.Items[0]。DBGrid初始化时加入下列代码:
DBGrid1.DataSource.DataSet.Fields[0].DisplayLabel:='√';                         //  设置选择列显示名称
DBGrid1.Columns.Items[0].Width:=DBGrid1.Canvas.TextWidth('123');     //  设置选择列宽度

    四、在DBGrid1CellClick事件中,使用下列代码。功能是只要鼠标点击“选择”列,其Boolean值为原值的反值。

procedure TPrintTableFrm.DBGrid1CellClick(Column: TColumn);
begin
  if DBGrid1.SelectedField.DataType=ftboolean then
  begin
    with DBGrid1.DataSource.DataSet do
    begin
      Edit;
      DBGrid1.SelectedField.AsBoolean:=not DBGrid1.SelectedField.AsBoolean;
      Post;
      DBGrid1.Options:=DBGrid1.Options-[dgEditing];
    end;
  end
  else begin
    if DBGrid1.SelectedField.DataType<>ftboolean then
       DBGrid1.Options:=DBGrid1.Options+[dgEditing];
  end;
end;
 

    五、在DBGrid1DrawColumnCell事件中,使用下列代码。功能就是重新画“选择”列上的字符。

procedure TPrintTableFrm.DBGrid1DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
const
  CtrlState: array[Boolean] of Integer = (DFCS_BUTTONCHECK, DFCS_BUTTONCHECK or DFCS_CHECKED);
begin
  if Column.Field.DataType = ftBoolean then
  begin
    DBGrid1.Canvas.FillRect(Rect);
    DrawFrameControl(DBGrid1.Canvas.Handle,
                     Rect,
                     DFC_BUTTON,
                     CtrlState[Column.Field.AsBoolean]);
  end;
end;


    六、在DBGrid1TitleClick事件中,使用下列代码。功能就是只要鼠标点击“选择”列的标题,可以设置“全选”或“全非”。

procedure TPrintTableFrm.DBGrid1TitleClick(Column: TColumn);
var i:integer;
begin
  if column.Index=0 then                                                         // 验证是否第一列
  begin
    DBGrid1.DataSource.DataSet.DisableControls;
    DBGrid1.DataSource.DataSet.First;                              // 游标回滚
    DBGrid1.SelectedRows.CurrentRowSelected:=true;   // 第一行被选中
    if trim(column.Title.Caption)='√' then
    begin
      for i:=0 to dbgrid1.DataSource.DataSet.RecordCount-1 do
      begin
        dbgrid1.Fields[0].DataSet.edit;
        dbgrid1.Fields[0].AsBoolean:=true;
        dbgrid1.Fields[0].DataSet.post;
        dbgrid1.datasource.dataset.next;
      end;
      column.Title.Caption:='×';
    end
    else begin
      for i:=0 to dbgrid1.DataSource.DataSet.RecordCount-1 do
      begin
        dbgrid1.Fields[0].DataSet.edit;
        dbgrid1.Fields[0].AsBoolean:=false;
        dbgrid1.Fields[0].DataSet.post;
        dbgrid1.datasource.dataset.next;
      end;
      column.Title.Caption:='√';
    end;
    DBGrid1.DataSource.DataSet.First;                                       // 游标回滚
    DBGrid1.SelectedRows.CurrentRowSelected:=true;            // 选中第一行
    DBGrid1.DataSource.DataSet.EnableControls;
  end;
end;

    通过上述代码设置,编译可见效果图:

TDBGrid是Delphi中用于显示数据库表格数据的控件。下面是关于如何使用TDBGrid的一些说明: 1. 数据源绑定: - 将TDBGrid与一个数据源(TDataSource)关联起来,通过设置TDBGrid的DataSource属性来实现数据绑定。 - 将数据集(TDataSet)与数据源关联,通过设置TDataSource的DataSet属性来指定数据集。 2. 显示列: - TDBGrid会自动根据数据集字段来创建列。可以通过在设计时设置Columns属性或在运行时使用Columns.Add方法来自定义列。 - 可以使用TDBGrid的DefaultDrawing属性来控制是否显示默认的列。 3. 列标题和宽度: - 可以通过在设计时设置Columns属性或在运行时使用Columns[x].Title.Caption属性来设置列的标题。 - 可以通过在设计时设置ColWidths属性或在运行时使用ColWidths[x]属性来设置列的宽度。 4. 数据排序: - 可以通过点击列标题来对数据进行排序。可以设置Options属性中的dgTitles属性来启用或禁用标题点击排序功能。 5. 数据编辑: - TDBGrid默认是只读的,无法直接在网格中编辑数据。如果需要编辑功能,可以设置Options属性中的dgEditing属性为True,并确保数据集允许编辑。 - 可以使用OnCellClick和OnColEnter事件来处理网格中单元格的点击和编辑。 6. 选择行: - 可以通过设置Options属性中的dgRowSelect属性来启用行选择功能。可以使用SelectedRows属性来访问选中的行。 7. 数据过滤: - 可以使用TDBGrid的OnTitleClick事件来实现数据过滤功能。通过在事件处理程序中设置过滤条件,然后重新加载数据集以显示过滤后的结果。 这些只是TDBGrid的一些基本用法说明,根据具体需求和场景,还可以进行更多的自定义和配置。可以参考Delphi的官方文档或其他教程资源,深入了解TDBGrid的更多特性和用法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值