Topic: Сортировка слайдов в TableGrid вручную

Здравствуйте подскажите можно ли сохранить в TableGrid строки расставленные вручную?. В свойствах компонента есть опция goRowMoving, которая позволяет перемещать и устанавливать строки в ручную. При закрытии и открытии формы расстановка сбрасывается и сортируется классически.
KeepUsertSort попробовал -не работает. Как можно это реализовать?

Post's attachments

Attachment icon Безымянный.png 21.59 kb, 154 downloads since 2018-06-28 

Re: Сортировка слайдов в TableGrid вручную

Здравствуй,
Возможно, вы могли бы попробовать это так.
С уважением,
Derek.

Post's attachments

Attachment icon usersort.zip 337.52 kb, 306 downloads since 2018-06-28 

Re: Сортировка слайдов в TableGrid вручную

Приветствую.


Скачайте пожалуйста последнюю бета версию
https://www.dropbox.com/s/sunrl4ano9340 … a.zip?dl=0


Добавил для компонента TableGrid события OnRowMove и OnAfterRowMove, теперь записи можно переставлять таким образом

procedure Form1_TableGrid1_OnRowMove (Sender: TObject; FromPos, ToPos: Integer; var Accept: Boolean);
var
    orderFrom, orderTo: integer;
begin
    orderFrom := SQLExecute('SELECT record_count FROM people WHERE id='+ IntToStr(Form1.TableGrid1.dbIndexToID(FromPos)));
    orderTo :=   SQLExecute('SELECT record_count FROM people WHERE id='+ IntToStr(Form1.TableGrid1.dbIndexToID(ToPos)));

    SQLExecute('UPDATE people SET record_count = ' + IntToStr(orderFrom) + ' WHERE id='+ IntToStr(Form1.TableGrid1.dbIndexToID(ToPos)));
    SQLExecute('UPDATE people SET record_count = ' + IntToStr(orderTo) + ' WHERE id='+ IntToStr(Form1.TableGrid1.dbIndexToID(FromPos)));
end;

procedure Form1_TableGrid1_OnAfterRowMove (Sender: TObject; FromPos, ToPos: Integer);
begin
    Form1.TableGrid1.dbUpdate;
end;

Проект с примером:

Post's attachments

Attachment icon usersort_fixed.zip 5.96 kb, 288 downloads since 2018-06-28 

Dmitry.

4 (edited by Kirs 2018-06-28 14:39:03)

Re: Сортировка слайдов в TableGrid вручную

Здравствуйте Дмитрий в новой версии 4.5 бета крашит проект ошибкой access violation
если отключить скрипты запускается нормально.

И при перетаскивании слайда выдает
"Could not convert variant of type (UnicodeString) into type (Boolean)"


Для Дерека
Попробовал ваш вариант. не работает в моем случае. Возможно из за связанных таблиц.

Re: Сортировка слайдов в TableGrid вручную

Kirs wrote:

Здравствуйте Дмитрий в новой версии 4.5 бета крашит проект ошибкой access violation
если отключить скрипты запускается нормально.

И при перетаскивании слайда выдает
"Could not convert variant of type (UnicodeString) into type (Boolean)"

Ошибка появляется при запуске проекта, который я дал выше? Если да, пожалуйста пришлите мне zip архив всей папки данного проекта на support@drive-software.com
протестирую.

Dmitry.

Re: Сортировка слайдов в TableGrid вручную

Ошибка появляется в моем проекте приложил его

7 (edited by derek 2018-06-28 17:50:21)

Re: Сортировка слайдов в TableGrid вручную

Datagrid может отображать данные из одной таблицы или из многих связанных таблиц; это не имеет значения, потому что моя сохраненная последовательность сортировки использует номер автоинкремента самого datagrid - он не зависит от каких-либо таблиц.
В этом примере я оставил 2 столбца видимыми, чтобы вы могли видеть, что происходит. При первом запуске программы столбец «old sort order» и столбец «new sort order» всегда будут одинаковыми. Когда вы впоследствии меняете порядок сортировки, столбец «new sort order» никогда не изменяется, и это порядок сортировки, чем он сохраняется при закрытии программы.
И убедитесь, что последовательность сортировки, указанная в свойствах объекта datagrid, установлена в столбец «new sort order», иначе он не будет работать
Извините, если это неясно - с помощью переводчика Google.
Дерек

Post's attachments

Attachment icon usersort1.zip 339.08 kb, 292 downloads since 2018-06-28 

8 (edited by Kirs 2018-06-28 20:52:30)

Re: Сортировка слайдов в TableGrid вручную

Выяснилось.... Сортировка  работает, но не на все поля. и выглядит как на рисунке. и двойные записи не сортируются

Спасибо derek.  Разобрался с проблемой. Я работал с другой таблицей, где ID были общие.

Дмитрий по поводу Новой версии 4.5 бета, пока не разобрался, если будет время посмотрите почему крашит.

Post's attachments

Attachment icon Безымянный.png 2.31 kb, 167 downloads since 2018-06-28 

9 (edited by Kirs 2018-06-28 21:14:02)

Re: Сортировка слайдов в TableGrid вручную

А как будет выглядеть этот скрипт,

procedure Form1_OnClose (Sender: string; Action: string);
var  vc, vi: integer;
begin
  vc := form1.tablegrid1.RowCount-1;
  for vi := 0 to vc do
    begin
      sqlexecute('update people set mysort = ("'+form1.tablegrid1.cells[3,vi]+'") where id =' +inttostr(form1.tablegrid1.dbindextoid(vi)));
    end;
end;

если на форме более одного TableGrid, а данные  из одной таблицы фильтруются в каждом TableGrid, ну и что еще изменится?

Re: Сортировка слайдов в TableGrid вручную

Заработало так:

procedure frmEkran_OnClose (Sender: TObject; Action: string);
var  vi, vc1, vc2, vc3, vc4, vc5, vc6, vc7,: integer;
begin
  vc1 := frmEkran.tablegrid1.RowCount-1;
    for vi := 0 to vc1 do
begin
    sqlexecute('update tabtehproc set mysort = ("'+frmEkran.tablegrid1.cells[9,vi]+'") where id =' +inttostr(frmEkran.tablegrid1.dbindextoid(vi)));
end;
begin
  vc2 := frmEkran.tablegrid2.RowCount-1;
    for vi := 0 to vc2 do
begin
    sqlexecute('update tabtehproc set mysort = ("'+frmEkran.tablegrid2.cells[9,vi]+'") where id =' +inttostr(frmEkran.tablegrid2.dbindextoid(vi)));
end;
end;

Re: Сортировка слайдов в TableGrid вручную

Kirs wrote:

Ошибка появляется в моем проекте приложил его

Спасибо за проект, ошибка была в программе My Visual Database, поправил, скачайте пожалуйста последнюю бета версию
https://www.dropbox.com/s/sunrl4ano9340 … a.zip?dl=0

Dmitry.