Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Сортировка по клику на колонке


Автор: bartram 22.7.2005, 08:31
Сабж! Как? В демо римере это есть но не могу понять как реализовано подскажите плиз!

Автор: ~FoX~ 22.7.2005, 08:55
DBGridEh1.Columns[1].Title.SortMarket := smUpEh;

Автор: Grig 22.7.2005, 09:48
Я вот так делаю..
Код

procedure TFrVvod.DBGridEh1TitleClick(Column: TColumnEh);
begin
 if Column.FieldName = 'MyField' then
 begin
    case Column.Title.SortMarker of
    smNoneEh:
    begin
      Table1.Sort:='MyField DESC';
      Column.Title.SortMarker := smDownEh;
    end;
    smDownEh:
    begin
      Table1.Sort:='MyField ASC';
      Column.Title.SortMarker := smUpEh;
    end;
    smUpEh:
    begin
      Table1.Sort:='MyField';
      Column.Title.SortMarker := smNoneEh;
    end;
    end; //case
 end;//if 
end;//procedure

Автор: bartram 22.7.2005, 13:44
Grig, спасибо за код, я его доработал и вот что получилось. Так гораздо проще.
Код

begin
    case Column.Title.SortMarker of
    smNoneEh:
    begin
      Table.Sort:=Column.FieldName;
      Column.Title.SortMarker := smDownEh;
    end;
    smDownEh:
    begin
      Table.Sort:=Column.FieldName ;
      Column.Title.SortMarker := smUpEh;
    end;
    smUpEh:
    begin
      Table.Sort:=Column.FieldName;
      Column.Title.SortMarker := smNoneEh;
    end;
    end; //case
 end;

Тебе + за подсказку smile

Автор: Grig 25.7.2005, 03:49
bartram, последние штрихи к твоему коду:

Код

    case Column.Title.SortMarker of    
    smNoneEh:    
    begin    
      dm.ADOTemp1.Sort:=Column.FieldName+'  DESC';
      Column.Title.SortMarker := smDownEh;    
    end;    
    smDownEh:    
    begin    
      dm.ADOTemp1.Sort:=Column.FieldName+' ASC' ;
      Column.Title.SortMarker := smUpEh;    
    end;    
    smUpEh:    
    begin    
      dm.ADOTemp1.Sort:=Column.FieldName; {а вот эту строчку вообще можно убрать, от нее ни холодно, ни жарко}
      Column.Title.SortMarker := smNoneEh;    
    end;    
    end; //case


Без ASC и DESC при повторном нажатии на заголовке той же колонки ничего не произойдет...
То есть значок в заголовке изменится, а сама таблица не отсортируется.

Автор: bartram 25.7.2005, 10:47
Цитата(Grig @ 25.7.2005, 03:49)
То есть значок в заголовке изменится, а сама таблица не отсортируется.

Попробуй, всё и так изменится
smile

Автор: offline 25.7.2005, 10:51
Лучше через SQL сортировать smile

Автор: Петрович 13.8.2005, 00:34
Люди, вы что, с дуба рухнули? Столько писанины ради сортировки?
Там-же все делается практически автоматически. smile
Откройте хелп на первой странице описания компонента DBGridEh, и внимательно, с выражением, почитайте эту страницу до конца. Узнаете много интересного. Особенно в разделе Using DBGridEh for sorting and filtering data in the DataSet.

Автор: delphi_ 30.11.2006, 23:54
Петрович,можете  еще раз пояснить? smile 

Сделал как у вам написано вот тут http://www.ehlib.com/EhLibUsersGuide/UsingDBGridEh.htm
Использую ADO для соединения с базой ACCESS (локальная)

dghMultiSortMarking поставил в True
Column.Title.TitleButton всех колонок тоже поставил в true

но вот как делать дальше?чем ни как понять не могу...куда там датсет пристраивать?
буду оч признателен если поможете...

Автор: Vas 1.12.2006, 07:48
Привяжи к проекту модуль EhLibADO. 

Автор: Akella 1.12.2006, 09:31
да, просто добавь его в uses

Автор: delphi_ 1.12.2006, 16:43
добавил
терь при клике по калонке выдает сие-
user posted image

поговорил с девелопером собстна ехлибы,он сказал не юзать АДО тейбл...но как тогда канектиться к базе?

Автор: Akella 1.12.2006, 17:53
ну на крайняк по ставь свойство грида  localsort в True

Автор: delphi_ 1.12.2006, 19:05
заработало,спасибо большое

Автор: Veniamin 22.4.2008, 21:04
Пишу программу для работы с БД на Access, соединение через ADO. Вопрос по сортировке: Сортирую по IndexFieldNames, по-любому полю сортируется кроме ключевого. Вот что выдаёт:

http://ipicture.ru/

Как сортировать по ключевому полю?

Автор: delphi_ 22.4.2008, 22:59
а что мешает погуглить на счет ошибок аксесса?

Автор: Veniamin 23.4.2008, 10:40
delphi_ Эта ошибка не в Access, а в Делфи после выполнения команды сортировки выскакивает.

Автор: Akella 23.4.2008, 18:36
Вот ещё по поводу сортировки
http://www.delphiplus.org/articles/components/multicolored_dbgrid/index.html

Автор: Ganoci 14.5.2008, 15:33
Ребят, помогите плз решить возникшую проблему!
Сортирую по указанной схеме:
Цитата

procedure TForm1.DBGridEh1TitleClick(Column: TColumnEh);
begin
case Column.Title.SortMarker of
    smNoneEh:
    begin
      two.Sort:=Column.FieldName;
      Column.Title.SortMarker := smDownEh;
    end;
    smDownEh:
    begin
      two.Sort:=Column.FieldName ;
      Column.Title.SortMarker := smUpEh;
    end;
    smUpEh:
    begin
      two.Sort:=Column.FieldName;
      Column.Title.SortMarker := smNoneEh;
    end;
    end; //case

end;


Если подобную сортировку применить к Гриду (таблице), несвязанному с другими таблицами, то все норма!
У меня же две таблицы взаимосвязаны, т.е.  вопервых есть связь в БД, а во-вторых, на форме организованно все так, что есть главная таблица и от каждая её строки (клику по ней) - идет ветвление на насколько строк уже в другом гриде.
http://ipicture.ru/Gallery/Viewfull/1851716.html

Так вот если отсортировать поля в подчиненном гриде, то когда меняешь позицию (клик по другой строке) в главном гриде, то связи с младшей таблицей прерывается иона пустует.
http://ipicture.ru/Gallery/Viewfull/1851744.html

Автор: Дюша2011 13.1.2011, 20:53
Цитата(Ganoci @ 14.5.2008,  15:33)
Ребят, помогите плз решить возникшую проблему!
Сортирую по указанной схеме:
Цитата

procedure TForm1.DBGridEh1TitleClick(Column: TColumnEh);
begin
case Column.Title.SortMarker of
    smNoneEh:
    begin
      two.Sort:=Column.FieldName;
      Column.Title.SortMarker := smDownEh;
    end;
    smDownEh:
    begin
      two.Sort:=Column.FieldName ;
      Column.Title.SortMarker := smUpEh;
    end;
    smUpEh:
    begin
      two.Sort:=Column.FieldName;
      Column.Title.SortMarker := smNoneEh;
    end;
    end; //case

end;


Если подобную сортировку применить к Гриду (таблице), несвязанному с другими таблицами, то все норма!
У меня же две таблицы взаимосвязаны, т.е.  вопервых есть связь в БД, а во-вторых, на форме организованно все так, что есть главная таблица и от каждая её строки (клику по ней) - идет ветвление на насколько строк уже в другом гриде.
http://ipicture.ru/Gallery/Viewfull/1851716.html

Так вот если отсортировать поля в подчиненном гриде, то когда меняешь позицию (клик по другой строке) в главном гриде, то связи с младшей таблицей прерывается иона пустует.
http://ipicture.ru/Gallery/Viewfull/1851744.html

Я проблему решил такми образом:

ADOTable2.IndexFieldNames := 'ID2, Глубина ASC';


где ID2 это индексное поле через которе связана таблица 2 с главной таблицей, а Глубина - это сортируемое поле.
При этом методе не теряется связь между таблицами.

Автор: superVad 13.1.2011, 21:27
И трех лет не прошло.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)