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.

  • 相关阅读:
    (转载)VS2010/MFC编程入门之三十七(工具栏:工具栏的创建、停靠与使用)
    (转载)VS2010/MFC编程入门之三十五(菜单:菜单及CMenu类的使用)
    (转载)VS2010/MFC编程入门之三十三(常用控件:标签控件Tab Control 下)
    (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
    ubuntu下格式化u盘
    Android笔记之AppWidget
    Android笔记之ViewPager实现滑动页面
    Android笔记之获取布局中的多个子控件
    Android笔记之Actionbar制作选项卡(可滑动)
    Android笔记之Actionbar使用(二)
  • 原文地址:https://www.cnblogs.com/fengju/p/6173866.html
Copyright © 2011-2022 走看看