网站建设| 数据库类| 图形图象| 程序设计| 现代办公| 操作系统| 考试认证| 网络技术| 软件工程| 电脑相关| 文学作品
网站开发| 网页制作| 操作系统| 图象图形| 考试认证| 数据库类| 程序设计| 硬件技术| 现代办公| 网络技术| 笑话频道
 
您的位置: 电脑书库首页-> 电脑文摘-> 程序设计-> 其它-> DBGrid中Shift多选

DBGrid中Shift多选
作者:佚名 来源:InterNet 加入时间:2007-1-26
相关文章 相关书籍:
[dgTitles, dgIndicator, dgColumnResize, dgColLines, dgRowLines,
dgTabs, dgRowSelect, dgConfirmDelete, dgCancelOnExit, dgMultiSelect]

相关代码
procedure TFamEditPeople.DBGrid1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  FKeyShift := ssShift in Shift;
end;

procedure TFamEditPeople.DBGrid1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  FKeyShift := False;
end;

procedure TFamEditPeople.DataSource1StateChange(Sender: TObject);
begin
  FOldNo := FRecNo;
  if TDataSource(Sender).DataSet.Active then
    FRecNo := TDataSource(Sender).DataSet.RecNo;
  FKeyShift := False;
end;

procedure TFamEditPeople.DBGrid1MouseUp(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
  I: Integer;
begin
  if Button <> mbLeft then
    Exit;
  if not TDBGrid(Sender).DataSource.DataSet.Active then
    Exit;
  if FKeyShift then begin
    FRecNo := TDBGrid(Sender).DataSource.DataSet.RecNo;
    if FKeyShift then DBGrid1.SelectedRows.CurrentRowSelected := True;
    if FOldNo = -1 then
      FOldNo := 1;
    if FRecNo > FOldNo then
      for I := FRecNo downto FOldNo do begin
        TDBGrid(Sender).DataSource.DataSet.RecNo := I;
        TDBGrid(Sender).SelectedRows.CurrentRowSelected := True;
      end
    else
      for I := FRecNo to FOldNo do begin
        TDBGrid(Sender).DataSource.DataSet.RecNo := I;
        TDBGrid(Sender).SelectedRows.CurrentRowSelected := True;
      end;
  end
  else//Shift not pressed
    FOldNo := TDBGrid(Sender).DataSource.DataSet.RecNo
end;



实现DBGrid Shift+鼠标左键单击 多选
关键字: DBGrid Shift 多选
分类: 个人专区
密级: 公开
(评分: , 回复: 0, 阅读: 96) &raquo;&raquo;
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    DBGrid1: TDBGrid;
    ADOConnection1: TADOConnection;
    DataSource1: TDataSource;
    Button1: TButton;
    ADOTable1: TADOTable;
    procedure DBGrid1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    blSelect: Boolean;
    BookMark: TBookMark;
    CurrNo, OldNo: integer;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.DBGrid1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin //实现 Shift+鼠标左键单击 多选
  if Button = mbLeft then
  begin
    if not blSelect then
    begin
      BookMark := ADOTable1.GetBookMark;
      OldNo := ADOTable1.RecNo;
      blSelect := True;
      Exit;
    end
    else
    begin
      if ssShift in Shift then
      begin
        CurrNo := ADOTable1.RecNo;
        ADOTable1.DisableControls;
        ADOTable1.GotoBookmark(BookMark);
        DBGrid1.SelectedRows.CurrentRowSelected := True;
        if CurrNo > OldNo then
        begin
          while CurrNo > ADOTable1.RecNo do
          begin
            DBGrid1.SelectedRows.CurrentRowSelected := True;
            ADOTable1.Next;
          end;
        end
        else
        begin
          while CurrNo < ADOTable1.RecNo do
          begin
            DBGrid1.SelectedRows.CurrentRowSelected := True;
            ADOTable1.Prior;
          end;
        end;
        ADOTable1.EnableControls;
        ADOTable1.FreeBookmark(BookMark);
        blSelect := False;
        CurrNo := 0;
        OldNo := 0;
      end
      else
      begin
        BookMark := ADOTable1.GetBookMark;
        OldNo := ADOTable1.RecNo;
        blSelect := True;
        Exit;
      end;
    end;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  ADOConnection1.Connected := true;
  ADOTable1.Close;
  ADOTable1.TableName := 'Table_Name'; //表名
  ADOTable1.Open;
  DBGrid1.Options := DBGrid1.Options + [dgMultiSelect]; //开启多选
end;

end.

//另外,Shift+小键盘UP/DOWN 也可以实现多选  

[文章录入员:nancy]

相关文章 相关书籍:
本站推荐内容

近期主机类热搜关键词:
美国服务器 美国服务器租用 海外服务器租用 国外服务器租用

其它
C/C++/VC
C++Builder
Basic/VB类
Delphi/Pascal
Java编程
FORTRAN
其它
电脑教程阅读排行
·妙用标识符
·DBGrid中Shift多选
·一个EMail检查程序