Текущий архив: 2003.01.23;
Скачать: CL | DM;
Вниз
как проще всего отсортировать 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;
Скачать: CL | DM;
Память: 0.55 MB
Время: 0.008 c