Delphi DBGrid 按标题排序,按Shift + 鼠标左健多选

Delphi DBGrid 按标题排序,按Shift + 鼠标左健多选

在private处增加变量
    blSelect: Boolean;
    BookMark: TBookMark;
    CurrNo, OldNo: integer;

//按标题排序
procedure TPlanInputForm.DBGrid1TitleClick(Column: TColumn);
begin
  FDQuery1.IndexFieldNames := Column.FieldName;
end;

//按Shift + 鼠标左健多选
procedure TPlanInputForm.DBGrid1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);

begin
  if Button = mbLeft then
  begin
    if not blSelect then
    begin

      BookMark := DBGrid1.DataSource.DataSet.GetBookMark;
      OldNo := DBGrid1.DataSource.DataSet.RecNo;
      blSelect := True;
      Exit;
    end
    else
    begin

      if ssShift in Shift then
      begin
        CurrNo := DBGrid1.DataSource.DataSet.RecNo;
        DBGrid1.DataSource.DataSet.DisableControls;
        DBGrid1.DataSource.DataSet.GotoBookmark(BookMark);
        DBGrid1.SelectedRows.CurrentRowSelected := True;
        if CurrNo > OldNo then
        begin
          while CurrNo > DBGrid1.DataSource.DataSet.RecNo do
          begin
            DBGrid1.SelectedRows.CurrentRowSelected := True;
            DBGrid1.DataSource.DataSet.Next;
          end;
        end
        else
        begin
          while CurrNo < DBGrid1.DataSource.DataSet.RecNo do
          begin
            DBGrid1.SelectedRows.CurrentRowSelected := True;
            DBGrid1.DataSource.DataSet.Prior;
          end;
        end;
        DBGrid1.DataSource.DataSet.EnableControls;
        DBGrid1.DataSource.DataSet.FreeBookmark(BookMark);
        blSelect := False;
        CurrNo := 0;
        OldNo := 0;
        DBGrid1.Invalidate;
      end
      else
      begin
        BookMark := DBGrid1.DataSource.DataSet.GetBookMark;
        OldNo := DBGrid1.DataSource.DataSet.RecNo;
        blSelect := True;
        Exit;
      end;
    end;
  end;
end;


//执行选择的记录
procedure TPlanInputForm.Button2Click(Sender: TObject);
var
  tempBookMark :TbookMark;
  i            :integer;
  SQL          : string;
begin
  if FDQuery1.recordcount > 0 then
  begin
    if dbgrid1.SelectedRows.Count <= 0 Then
    begin
      MessageBox(Handle,'请选择需要的记录','提示',MB_OK);
      Exit;
    end;

    i:=0;
    DBGrid1.Datasource.Dataset.DisableControls;
    While i<=dbgrid1.SelectedRows.Count - 1 Do
    Begin
      DBGrid1.Datasource.Dataset.Bookmark:=dbgrid1.SelectedRows.Items[i];//重要的在这里,取得BOOKMARK
      TempBookmark:=DBGrid1.Datasource.Dataset.GetBookmark;
      DBGrid1.Datasource.Dataset.GotoBookmark(TempBookmark);
      if Dbgrid1.DataSource.DataSet.fieldbyname('TA015').Value > 0 then
      begin
        SQL := 'exec TWDJ_PlannedTmpAdd ' + Quotedstr(Dbgrid1.DataSource.DataSet.fieldbyname('TA001').AsString) + ',' +
               Quotedstr(Dbgrid1.DataSource.DataSet.fieldbyname('TA002').AsString) + ',' +
               Quotedstr(Get_UserName);

        FDQuery4.Close;
        FDQuery4.SQL.Text := SQL;
        FDQuery4.execsql;

      end;
//      showmessage(Dbgrid1.DataSource.DataSet.fieldbyname('TA003').AsString);
      DBGrid1.Datasource.Dataset.FreeBookmark(TempBookmark);     //释放BOOKMARK
      inc(i);   //下一个选择记录
    End;
    DBGrid1.Datasource.Dataset.EnableControls;
    FDQuery1.Close;
    FDQuery1.Open;
  end
  else
  begin
    showmessage('没有数据可以处理!');
    exit;
  end;

  FDQuery1.Close;
  FDQuery1.Open;

  FDQuery2.Close;
  FDQuery2.SQL.Text := 'select * from  TWDJ_PlannedTmp where GDUser = ' + Quotedstr(Get_UserName);
  FDQuery2.Open;
end;


//全选
procedure TPlanInputForm.N4Click(Sender: TObject);
begin
  with DBGrid1.datasource.dataset do
  begin
    First;
    while not FDQuery1.EOF   do
    begin
       DBGrid1.SelectedRows.CurrentRowSelected := True;
       FDQuery1.Next;
    end;
  end;
end;

//取消选择
procedure TPlanInputForm.N5Click(Sender: TObject);
begin
  try
  // 清除当前选中行
    DBGrid1.SelectedRows.Clear;
  finally
    DBGrid1.SelectedRows.CurrentRowSelected := False;
  end;
end;

  • 15
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值