제가 원하는 것은 디비그리드에서 여러개를 쉬프트로 눌러 지정하고 삭제를
하고자 합니다.
먼저 그리드 옵션을 멀티 셀렉트를 TRUE로 지정을 하였는데 CTRL키는
동작이 되는데 SHIFT키가 동작이 안되는데 왜 그런지요?
그리고 게시판을 보니 삭제는 북마크 기능을 이용하면 된다고 하였는데 북마크 샘플 좀 알려주시면 감사하겠습니다.
procedure TForm1.DBGrid1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
i, j : longint;
begin
if oldPos >= 0 then
begin
if (Button in [mbLeft]) and (Shift = [ssShift]) then
begin
j := dbgrid1.DataSource.DataSet.RecNo - 1;
dbgrid1.DataSource.DataSet.GotoBookmark(bm);
for i := oldpos to j do
begin
dbgrid1.SelectedRows.CurrentRowSelected := true;
dbgrid1.DataSource.DataSet.Next;
end;
end;
end;
bm := dbgrid1.DataSource.DataSet.GetBookmark;
oldPos := dbgrid1.DataSource.DataSet.RecNo - 1;
얼마전에 님 질문 간단히 답해 드렸던거 같은데..
아직 해결하지 못하신건가여??...도움이 될지 모르지만..
private
{ Private declarations }
oldPos : longint;
bm : TBookMark;
public
:
:
procedure TForm1.DBGrid1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
i, j : longint;
begin
if oldPos >= 0 then
begin
if (Button in [mbLeft]) and (Shift = [ssShift]) then
begin
j := dbgrid1.DataSource.DataSet.RecNo - 1;
dbgrid1.DataSource.DataSet.GotoBookmark(bm);
for i := oldpos to j do
begin
dbgrid1.SelectedRows.CurrentRowSelected := true;
dbgrid1.DataSource.DataSet.Next;
end;
end;
end;
bm := dbgrid1.DataSource.DataSet.GetBookmark;
oldPos := dbgrid1.DataSource.DataSet.RecNo - 1;
end;
버그가 있긴 하지만....수정해서..^^;
위에 보시면..for문 돌 횟수를 계산해서..
레코드 포인터를 이동하면서 속성을 true로 바꿔주시면 됩니다.
그리고..위의 예는 아주 단순하게 먼저 시작 레코드를 클릭해주고.
쉬프트키 누를 상태에서..좀전보다..더 큰 레코드를 클릭한다는 가정하에서만
정상 작동할 겁니다..예외상황 처리나..기타..좀 다듬긴 해야하지만..
어떻게 해야할지 방법 제시는 된거 같아 그냥 올립니다..
즐프~~