zoukankan      html  css  js  c++  java
  • 如何在DBGrid的每一行前加一个单选框?

    Unit Unit1;

    Interface

    Uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, Grids, DBGrids, DB, ADODB;

    Type
      TForm1 = Class(TForm)
        DataSource1: TDataSource;
        ADOTable1: TADOTable;
        DBGrid1: TDBGrid;
        Procedure DBGrid1DrawColumnCell(Sender: TObject; Const Rect: TRect;
          DataCol: Integer; Column: TColumn; State: TGridDrawState);
        Procedure DBGrid1ColEnter(Sender: TObject);
        Procedure DBGrid1ColExit(Sender: TObject);
        Procedure DBGrid1CellClick(Column: TColumn);
        Procedure DBGrid1KeyDown(Sender: TObject; Var Key: Word;
          Shift: TShiftState);
      private
        OriginalOptions: TDBGridOptions;
        Procedure SaveBoolean;
        { Private declarations }
      public
        { Public declarations }
      End;

    Var
      Form1: TForm1;

    Implementation

    {$R *.dfm}

    Procedure TForm1.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);
     // CtrlString:=string;
    Begin
    //确保只有在逻辑字段才能插入组件
      If Column.Field.DataType = ftBoolean Then
      Begin
        DBGrid1.Canvas.FillRect(Rect);
        DrawFrameControl(DBGrid1.Canvas.Handle, Rect, DFC_BUTTON, CtrlState[Column.Field.AsBoolean]); //画框框
       // Column.Field.Text:='google';

      End;
    End;

    Procedure TForm1.DBGrid1ColEnter(Sender: TObject);
    Begin
    // 确保该栏是逻辑字段
      If DBGrid1.SelectedField.DataType = ftBoolean Then
      Begin
        OriginalOptions := DBGrid1.Options;
        DBGrid1.Options := DBGrid1.Options - [dgEditing];
      End;
    End;

    Procedure TForm1.DBGrid1ColExit(Sender: TObject);
    Begin
    //确保该栏是逻辑字段
      If DBGrid1.SelectedField.DataType = ftBoolean Then
        DBGrid1.Options := OriginalOptions;
    End;

    Procedure TForm1.DBGrid1CellClick(Column: TColumn);
    Begin
    //确保该栏是逻辑字段
      If DBGrid1.SelectedField.DataType = ftBoolean Then
        SaveBoolean();
    End;

    Procedure TForm1.DBGrid1KeyDown(Sender: TObject; Var Key: Word;
      Shift: TShiftState);
    Begin
    //确保该栏是逻辑字段和空格键在键盘中被敲击
      If (Key = VK_SPACE) And (DBGrid1.SelectedField.DataType = ftBoolean) Then
        SaveBoolean();
    End;

    Procedure TForm1.SaveBoolean;
    Begin
      DBGrid1.SelectedField.Dataset.Edit;
      DBGrid1.SelectedField.AsBoolean := Not DBGrid1.SelectedField.AsBoolean;
      DBGrid1.SelectedField.Dataset.Post;
    End;
    End.

  • 相关阅读:
    [整] Android Fragment 生命周期图
    [原]Android Fragment 入门介绍
    [原]Android开发优化-Adapter优化
    [整] Android ListView 去除边缘阴影、选中色、拖动背景色等
    [整]Android开发优化-布局优化
    [原]Android 初遇Http错误 httpClient.execute
    [转]Android ANR 分析解决方法
    [整]Android SlidingMenu Demo 环境搭建
    RabbitMQ教程
    【centos7】添加开机启动服务/脚本
  • 原文地址:https://www.cnblogs.com/fengju/p/6173866.html
Copyright © 2011-2022 走看看