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;