Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.01.23;
Скачать: [xml.tar.bz2];

Вниз

как проще всего отсортировать dbgrid по щелчку на колонке?   Найти похожие ветки 

 
ironwit   (2002-12-26 10:18) [0]

глупо но интересно :-)


 
Reindeer Moss Eater   (2002-12-26 10:20) [1]

dbGrid отсортировать нельзя


 
ironwit   (2002-12-26 10:21) [2]

точнее данные в нем(там лежит сложный sql запрос).


 
Lady D   (2002-12-26 10:26) [3]


> точнее данные в нем(там лежит сложный sql запрос).

Усложнить запрос добавлением Order By


 
Reindeer Moss Eater   (2002-12-26 10:26) [4]

Определи имя поля таблицы колонки по которой произошел клик.
Сформируй новый запрос и выполни его


 
Anatoly Podgoretsky   (2002-12-26 10:33) [5]

Данные в нем тоже не лежат, "сортировать" надо набор данных


 
ironwit   (2002-12-26 10:35) [6]

ясно. :-(
усложнить запрос не получиться там уже хватает и Order By
и group by :-(

Ладно, будем думать. А так хотел юзерам приятное сделать ....


 
Кулюкин Олег   (2002-12-26 10:36) [7]

2 ironwit © (26.12.02 10:18)
> Reindeer Moss Eater (26.12.02 10:20)
> dbGrid отсортировать нельзя
Верно замечено.

> точнее данные в нем(там лежит сложный sql запрос).
В Гриде ничего не лежит, данные лежат в ДатаСете.
Можно:
1. Подключить к Вашей квере TClientDataSet, он умеет строить индексы, как Asc, так и Desc.
2. Использовать не дельфийный грид, а что-то более хитрое. ВРоде EhDBGrid умеет сортироваться.


 
Lady D   (2002-12-26 10:37) [8]


> ясно. :-(
> усложнить запрос не получиться там уже хватает и Order By
> и group by :-(

А на каком движке все это работает?


 
Reindeer Moss Eater   (2002-12-26 10:39) [9]

Убери dbgrid.
Отображай данные например в TStringGrid.
Используй метод CustomSort в классе TStringList.


 
ironwit   (2002-12-26 10:40) [10]

Кулюкин Олег © (26.12.02 10:36)
2 ironwit © (26.12.02 10:18)
>> Reindeer Moss Eater (26.12.02 10:20)
>> dbGrid отсортировать нельзя
>Верно замечено.

>> точнее данные в нем(там лежит сложный sql запрос).
>В Гриде ничего не лежит, данные лежат в ДатаСете.
>Можно:
>1. Подключить к Вашей квере TClientDataSet, он умеет строить >индексы, как Asc, так и Desc.
>2. Использовать не дельфийный грид, а что-то более хитрое. ВРоде EhDBGrid умеет сортироваться.

а где его можно было бы найти?

Lady D © (26.12.02 10:37)

> ясно. :-(
> усложнить запрос не получиться там уже хватает и Order By
> и group by :-(

А на каком движке все это работает?


mysql


 
Anatoly Podgoretsky   (2002-12-26 10:40) [11]

ironwit © (26.12.02 10:35)
Усложнять ничего не надо, надо изменить фразу ORDER BY


 
sniknik   (2002-12-26 10:47) [12]

Надо менять компоненты для доступа (у тебя какие?), возьми ADO любой запрос любой сложности неважно, по клику узнаеш имя поля (не проблема), и меняеш свойство Sort (сортирует сам датасет).
пример
ADODataSet1.Sort:= "LastName ASC, DateDue DESC"; //по одному еще проще


 
Weare   (2002-12-26 10:57) [13]

Можно просто используя TQuery и TDbGridEh сортировать по каждой колонке, да хоть по обеим сразу. У EhhLib есть демка на этот счет. Если хочеш, могу на мыло скинуть - там разберешься (если конечно у тебя Eh- есть)


 
ironwit   (2002-12-26 11:06) [14]

а где EhDBGrid можно найти?

Weare © (26.12.02 10:57)
Можно просто используя TQuery и TDbGridEh сортировать по каждой колонке, да хоть по обеим сразу. У EhhLib есть демка на этот счет. Если хочеш, могу на мыло скинуть - там разберешься (если конечно у тебя Eh- есть)


хорошо бы, но когда EhDBGrid найду.


 
Val   (2002-12-26 11:08) [15]

явный пример - вместо того чтобы подумать - ставим новый компонент. :(


 
Lady D   (2002-12-26 11:09) [16]


procedure TForm1.DBGrid1TitleClick(Column: TColumn);
begin
DBGrid1.DataSource.DataSet.Active := false;
With TQuery(DBGrid1.DataSource.DataSet).SQL do
begin
Clear;
Add("SELECT ......");
Add("ORDER BY " + Column.FieldName);
end;
DBGrid1.DataSource.DataSet.Active := true;
end;


 
ironwit   (2002-12-26 11:14) [17]


> Lady D © (26.12.02 11:09)
>
> procedure TForm1.DBGrid1TitleClick(Column: TColumn);
> begin
> DBGrid1.DataSource.DataSet.Active := false;
> With TQuery(DBGrid1.DataSource.DataSet).SQL do
> begin
> Clear;
> Add("SELECT ......");
> Add("ORDER BY " + Column.FieldName);
> end;
> DBGrid1.DataSource.DataSet.Active := true;
> end;

там запросы хранятся разные, но ладно. Идея понятна :-)
Спасибо


 
ironwit   (2002-12-26 11:15) [18]

я вот подумал, а если нужно по нескольким одновременно? :-)


 
Reindeer Moss Eater   (2002-12-26 11:18) [19]

А щелкнуть по двум колонкам одновременно успеешь?
:)


 
ironwit   (2002-12-26 11:27) [20]


>
> Reindeer Moss Eater (26.12.02 11:18)
> А щелкнуть по двум колонкам одновременно успеешь?
> :)

вряд-ли :-)


 
Roma   (2002-12-26 11:42) [21]

Здравствуйте... Опять я опоздал, наверно...

Насчет сортирвоки по клику - был простой и гениальный совет от Кулюкина Олега (Кулюкин Олег © (26.12.02 10:36)) - использовать TClientDataSet, т.е. не Query -> DataSource -> DBGrid, а Query -> DataSetProvider -> ClientDataSet -> DataSource -> DBGrid. По клику на колонке:

procedure TForm1.DBGrid1TitleClick(Column: TColumn);
begin
ClientDataSet1.IndexFieldNames := Column.Field.FieldName;
end;

Все... Никаких переделок запроса в Query.

Другой вопрос - а это действительно тебе надо? А то пользователей разбалуешь... ;)


 
ironwit   (2002-12-26 11:51) [22]


> Roma © (26.12.02 11:42)
> Здравствуйте... Опять я опоздал, наверно...
>
> Насчет сортирвоки по клику - был простой и гениальный
> совет от Кулюкина Олега (Кулюкин Олег © (26.12.02 10:36))
> - использовать TClientDataSet, т.е. не Query -> DataSource
> -> DBGrid, а Query -> DataSetProvider -> ClientDataSet ->
> DataSource -> DBGrid. По клику на колонке:
>
> procedure TForm1.DBGrid1TitleClick(Column: TColumn);
> begin
> ClientDataSet1.IndexFieldNames := Column.Field.FieldName;
> end;
>
> Все... Никаких переделок запроса в Query.
>
> Другой вопрос - а это действительно тебе надо? А то пользователей
> разбалуешь... ;)


громадное спасибо, попробую.

Ниче страшного, их балую - сам росту над собой. :-)


 
Weare   (2002-12-26 11:54) [23]


>to ironwit ©


Могу и EhLib выслать, занимает где-то 1.2М. Вообще класная вещь, там можно очень интересные вещи вытворять.


 
ironwit   (2002-12-26 11:59) [24]


> Weare © (26.12.02 11:54)
>
> >to ironwit ©
>
>
> Могу и EhLib выслать, занимает где-то 1.2М. Вообще класная
> вещь, там можно очень интересные вещи вытворять.

плс, на pteh01@pteh.sm.energy.gov.ua
нарезка по 800кб


 
vopros   (2002-12-26 12:04) [25]

procedure TForm1.DBGridEh10TitleBtnClick(Sender: TObject; ACol: Integer;
Column: TColumnEh);
begin
dm.Q_oborud.close;
dm.q_oborud.SQL.delete(dm.q_oborud.sql.count-1);
dm.q_oborud.SQL.add("order by "+column.fieldname);
dm.Q_oborud.open;
end;


 
ironwit   (2002-12-26 12:05) [26]

хотите прикол. Если пользоваться сцепкой посоветованной Roma, а query от Zeos то где теряются данные, то есть в dbgrid ничего не отображается


 
ironwit   (2002-12-26 12:09) [27]


> vopros © (26.12.02 12:04)
> procedure TForm1.DBGridEh10TitleBtnClick(Sender: TObject;
> ACol: Integer;
> Column: TColumnEh);
> begin
> dm.Q_oborud.close;
> dm.q_oborud.SQL.delete(dm.q_oborud.sql.count-1);
> dm.q_oborud.SQL.add("order by "+column.fieldname);
> dm.Q_oborud.open;
> end;

в этом гриде может отображаться много разнах запросов, не обязательно в конце стоит order by


 
Roma   (2002-12-26 12:25) [28]

> ironwit © (26.12.02 12:05)
хотите прикол. Если пользоваться сцепкой посоветованной Roma, а query от Zeos то где теряются данные, то есть в dbgrid ничего не отображается

Если использовать нормальный стандартный TQuery - все работает... Проверь все свойства связывания - DataSetProvider.DataSet, ClientDataSet.ProviderName, DataSource.DataSet, Grid.DataSource...


 
ironwit   (2002-12-26 12:33) [29]

все проверил еще раз, все нормально.

DataSetProvider.DataSet=query
ClientDataSet.ProviderName=DataSetProvider1
DataSource.DataSet=ClientDataSet1
Grid.DataSource=DataSource1


 
Roma   (2002-12-26 12:36) [30]

А если поменять Query от Zeos на стандартный дельфийский, тогда все нормально?...


 
Weare   (2002-12-26 12:46) [31]


> Roma ©


Вот это да, а я в свое время c SQL"ем игрался. Твоя сцепка прекрасно работает - это просто здорово.


 
Weare   (2002-12-26 12:48) [32]


> ironwit ©

Ты где-то ошибся, сделай так как Roma говорит и все нормательно.


 
ironwit   (2002-12-26 12:51) [33]


> Roma © (26.12.02 12:36)
> А если поменять Query от Zeos на стандартный дельфийский,
> тогда все нормально?...

а стандартный работает с mуsql?


 
Кулюкин Олег   (2002-12-26 12:54) [34]

2 ironwit © (26.12.02 10:40)
>2. Использовать не дельфийный грид, а что-то более хитрое. ВРоде EhDBGrid умеет сортироваться.
> а где его можно было бы найти?
А яндексом поискать?
На торри посмотреть?

EhDBGrid - часть EhLib

2 Roma © (26.12.02 11:42)
ClientDataSet умеет и по убыванию сортировать.
А RxDBGrid умеет рисовать стрелочки на кепшене.
Эту связку я и использую.


 
Кулюкин Олег   (2002-12-26 12:57) [35]

2 sniknik © (26.12.02 10:47)
> ADODataSet1.Sort:= "LastName ASC, DateDue DESC";
Надо же!
Я и не знал о такой фиче.
Спасибо.


 
ironwit   (2002-12-26 13:04) [36]


> Weare © (26.12.02 11:54)
>
> >to ironwit ©
>
>
> Могу и EhLib выслать, занимает где-то 1.2М. Вообще класная
> вещь, там можно очень интересные вещи вытворять

спасибо




 
Roma   (2002-12-26 13:07) [37]

> ironwit © (26.12.02 12:51)
а стандартный работает с mуsql?

Ты немного путаешь. Query не работает напрямую с БД, ни с какой.


 
ironwit   (2002-12-26 13:21) [38]


> Roma © (26.12.02 13:07)
> > ironwit © (26.12.02 12:51)
> а стандартный работает с mуsql?
>
> Ты немного путаешь. Query не работает напрямую с БД, ни
> с какой.

в том то весь и прикол что в zeos свой query для работы с базами, там у него много поддержки и ibsql,mysql,pgsql.


 
jee   (2002-12-26 13:35) [39]

Использую весьма часто в своих проектах. Просто всавляешь в OnTitleClick грида. Единственно, если используешь не ADO, то просто приводи к TTаble.

procedure TXForm.DBGrid2TitleClick(Column: TColumn);
begin
TADOTable(Column.Grid.DataSource.DataSet).IndexFieldNames := Column.FieldName;
end;
Кстати бывает нужно убрать сортировку, тогда я так делаю, щелкаю на самый левый прямоугольник в гриде (который перед первой колонкой), если он конечно отображается. А обработчик вот

procedure TRepForm.DBGridMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if (X < 10)and(Y < 15) then
TADOTable(DBGrid.DataSource.DataSet).IndexFieldNames := "";
end;


 
Anatoly Podgoretsky   (2002-12-26 13:40) [40]

ironwit © (26.12.02 13:21)
И ты думаешь они напрямую работают, тогда у них суперклассные программисты.



Страницы: 1 2 вся ветка

Форум: "Базы";
Текущий архив: 2003.01.23;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.55 MB
Время: 0.009 c
1-72396
MV-GROB
2003-01-13 12:10
2003.01.23
Не хочет работать COM DLL


1-72307
don_dampster
2003-01-15 15:44
2003.01.23
Копия файла


1-72316
kull
2003-01-15 18:00
2003.01.23
Нужен предок для написания дерева..


1-72180
NewGuest
2003-01-13 17:09
2003.01.23
Есть Form1 и Form2, у первой стоит StayOnTop, на 2-й тоже самое


14-72471
Ketmar
2003-01-04 20:37
2003.01.23
господа, а кто из вас Крапивина любит?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский