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.

  • 相关阅读:
    Best HTTP
    Unity3D游戏轻量级xlua热修复框架
    线段树
    7.1
    BZOJ 3011: [Usaco2012 Dec]Running Away From the Barn( dfs序 + 主席树 )
    BZOJ 3585: mex( 离线 + 线段树 )
    2015暑假集训
    BZOJ 3398: [Usaco2009 Feb]Bullcow 牡牛和牝牛( dp )
    BZOJ 2693: jzptab( 莫比乌斯反演 )
    2015.7.31
  • 原文地址:https://www.cnblogs.com/fengju/p/6173866.html
Copyright © 2011-2022 走看看