Форум: "Базы";
Текущий архив: 2007.05.27;
Скачать: [xml.tar.bz2];
ВнизКак определить запись перед/над которой отпускаю Drop в DBGrid-e Найти похожие ветки
← →
Silver... © (2007-03-09 14:20) [0]Как определить запись перед/над которой отпускаю Drop в DBGrid-e
Cell определяю так:
TDBGrid(Sender).MouseCoord(x, y).Y
TDBGrid(Sender).MouseCoord(x, y).X
а вот до записи никак не доберусь :(
← →
Ega23 © (2007-03-09 14:45) [1]300 лет назад делал. Что и как - уже не помню. Может чем поможет:
procedure TFMain.rxgPlantGoodsEndDrag(Sender, Target: TObject; X,
Y: Integer);
var
xCol, xRow : LongInt;
i:Integer;
ss:string;
// OldGoodID, NewGoodID, OldGoodOrd, NewGoodOrd : Integer;
NewGoodID, NewGoodOrd : Integer;
// OldGoodNam, NewGoodNam:String;
NewGoodNam:String;
StartRow:LongInt;
begin
StartRow:=(Sender as TRXDBGrid).Row;
//@@@@@@@@@@@@@@@@@@
(Sender as TRXDBGrid).MultiSelect := True;
IsDragging:=False;
(Sender as TRXDBGrid).MouseToCell(X, Y, xCol, xRow);
// if (StartRow=xRow) or (xRow=0) then Exit;
if (xRow=0) then Exit;
{
OldGoodID:=DMmilk.RQPlantGoods.FieldByName("GoodID").AsInteger;
OldGoodOrd:=DMmilk.RQPlantGoods.FieldByName("GoodOrd").AsInteger;
OldGoodNam:=Trim(DMmilk.RQPlantGoods.FieldByName("GoodNam").AsString);
}
i:=0;
DMmilk.RQPlantGoods.DisableControls;
if StartRow<xRow then
begin
While (i<(xRow-StartRow)) do
begin
i:=i+1;
DMmilk.RQPlantGoods.Next;
end;
end
else
begin
While (i<(StartRow-xRow)) do
begin
i:=i+1;
DMmilk.RQPlantGoods.Prior;
end;
end;
← →
Silver... © (2007-03-09 16:23) [2]Мне собственнто тока Значение одного поля нужно. Думал можно на прямую из DBGrid-а узнать.
если нет то наверное так лучше
DataSet.MoveBy(new_Y - old_Y);
← →
sniknik © (2007-03-09 17:08) [3]> Думал можно на прямую из DBGrid-а узнать
можно, из буфера на отображение (реальный там буфер или те же ссылки в датасет тебе в принципе неважно (спорили както тут по этому поводу... я уж и не помню кто победил ;), да и как оно там на самом деле тоже...))
пример. по координатам на движения мыши показывает значение поля из 1-го столбца.type
TMyDBGrid = class(TDBGrid);
...
procedure TForm1.DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var
i, sr: integer;
GridCoord: TGridCoord;
begin
with TMyDBGrid(Sender) do begin
GridCoord:= MouseCoord(X, Y);
i:= GridCoord.Y;
if i > 0 then begin
sr:= DataLink.ActiveRecord;
DataLink.ActiveRecord:= i-1;
Label1.Caption:= DataLink.Fields[0].AsString;
DataLink.ActiveRecord:= sr;
end else
Label1.Caption:= "<none>";
end;
end;
в принципе все что тебе нужно, но вот сама идея порядковые номера записей использовать, вставки между записями делать, имхо убогая... (а вот как сортировка по какомунибудь полю... и т.д. бред получится/либо ограничение, вот только по одному полю отсортировал и баста, больше нельзя ;()
← →
Ega23 © (2007-03-09 17:41) [4]
> sniknik © (09.03.07 17:08) [3]
Ага. Вот только у стандартного TDBGrid DataLink в protected сидит. Так что - только свой писать, дабы так просто было...
← →
Ega23 © (2007-03-09 17:44) [5]
> Ага. Вот только у стандартного TDBGrid DataLink в protected
> сидит. Так что - только свой писать, дабы так просто было.
> ..
И даже не у него, а у TCustomDBGrid...
← →
sniknik © (2007-03-09 18:05) [6]> Ага. Вот только у стандартного TDBGrid DataLink в protected сидит.
посмотри на приведенный код внимательней... первые 2 строчки.
← →
Ega23 © (2007-03-09 18:10) [7]
> посмотри на приведенный код внимательней... первые 2 строчки.
Сорри. Протест снят. :)
← →
Silver... © (2007-03-09 18:11) [8]на самом деле я мучаюсь красиво это
http://delphimaster.net/view/3-1173273530/
сделать
Сортуровку Юзер может делать как хочет кликая по заголовку, но если ему ручная сортировка нужна по какому нибудь тока ему извесному принципу будет ручками таскать.
Вот тут и проблемы начинаются ибо если надо переместить по више или по ниже области видения :( облом
New_Y = 1 для ID=1 и для ID=3
id
--------------
1
2
3 - "область видения"
4
5
-----------
3
4
5 - Др. "область видения" - после скрулинга
6
7
Вот отсюда и желание плучть ID той записи куда кладу
← →
ANB © (2007-03-09 18:30) [9]
> но если ему ручная сортировка нужна по какому нибудь тока
> ему извесному принципу будет ручками таскать.
Небось он еще захочет эту сортировку сохранить . . .
ИМХО - на стандартном гриде задерешься эту фичу делать.
← →
Silver... © (2007-03-09 18:46) [10]
> ANB © (09.03.07 18:30) [9]
Да это всё уже работает тока некрасиво а я хочу Drag and Drop
причем вся проблема в том как получить ID записи куды кладу
← →
Ega23 © (2007-03-09 19:00) [11]
> причем вся проблема в том как получить ID записи куды кладу
[3] - ИМХО, наиболее удобно.
← →
Silver... © (2007-03-09 20:41) [12]Вопрос снят все работает на ура
спасибо
> sniknik © (09.03.07 17:08) [3]
...и всем остальным
← →
sniknik © (2007-03-09 20:49) [13]> на самом деле я мучаюсь красиво это
> ...
> сделать
все похоже еще хуже чем думал...
какое начальное приращение будет между записями? т.е. NextRecord.Sequence - PrecRecord.Sequence чему равно? допустим 100, хватит? начинаешь вставлять по 100 записей, каждая получает средние между соседними значение, т.е. 50 - 25 - 12.5 - и т.д. и на сколько думаешь хватит? на 10 -15 раз по сто записей для переноса... дальше разность будет равна 0. а у тебя будет ограничение для юзера, то данной функцией можно только 10 раз пользоваться? а дальше идут непонятные глюки "я ее тащу, а оно назад скачет...", а еще хуже, в непонятно куда.
а если есть функции выделения всего (типа Ctrl+A) и/или выделяется (и переносится) сразу 1000 записей?...
← →
Silver... © (2007-03-10 21:35) [14]Ну на самом деле все не так страшно (в данном конкретном случае)
единстевенная проблемма это вставка много записей разом (но опять же в данном конкретном случае не привысит 10)
А вообще все дело в точности, в данном случае для 10 хватит
а решение скорее доп. возможнасть нежели панацея (...эту бы строчику ниже выше, ... и всё)
... можно и ограничить
- вставка маx. 5
- когда разность падает сгенерировать Sequence
- ...
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2007.05.27;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.041 c