![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
DBGRID - переиндексация набора данных [D6]
VALUA © (2006-06-08 10:29:00)Господа , здравствуйте !
Вопрос - есть DBGRID , который связан с набором данных IBQUERY1(select * from FAIL order by Pole1, Pole2) .
В DBGRID отображаются поля Pole1, Pole2 , хотелось бы сделать клик на названии Pole2 и набор данных перестроился по полю
Pole2 , клик на названии Pole1 и набор данных перестроился по полю Pole1 .
Как правильно сделать ?
Неужели каждый раз заново открывать набор , но с разный индексацией - IBQUERY1(select * from FAIL order by Pole2)
и т. д.
Спасибо .
rar (2006-06-09 17:59:00) [1]> свет заголовка тоже меняем.
>Обычно достаточно маленькой стрелки. Пользователи к этому привыкли. Не нужно из программы делать "раскарашку".
а как в титл DBgrid запросто засунуть стрелку, это ведь не ListView :-))
У нас на работе мы не применяем нестандартные контролы
atruhin (2006-06-08 21:29:00) [2]
> свет заголовка тоже меняем.
Обычно достаточно маленькой стрелки. Пользователи к этому привыкли. Не нужно из программы делать "раскарашку".
Сортировка НД не лучший вариант. Проще взять EhLib он работает по индексу.
Но обязательно запомнить золотые слова:
> Если в запрос добавить секцию where,
rar (2006-06-08 20:58:00) [3]Можно сделать так, при повтоном нажатии обратная сортировка, свет заголовка тоже меняем.
procedure TFormTree.DBGridMaterialTitleClick(Column: TColumn);
var
i:integer;
begin
if (Pos(Column.FieldName, DataModuleMain.qMaterial.Sort) > 0)and(Pos('ASC', DataModuleMain.qMaterial.Sort) > 0) then
DataModuleMain.qMaterial.Sort := Column.FieldName + ' DESC'
else
begin
DataModuleMain.qMaterial.Sort := Column.FieldName + ' ASC';
for i:=0 to dbGridMaterial.Columns.Count-1 do
dbGridMaterial.Columns[i].Title.Color:=clBtnFace;
Column.Title.Color:=$eeeeee;
end
end;
Virgo_Style (2006-06-08 18:59:00) [4]VALUA (08.06.06 13:51) [4]
чему при этом равно FieldName ?
VALUA (2006-06-08 13:51:00) [5]Господа , что делаю не так ? Кликаю на заголовке поля (pole1) и набор данных должен проиндексироваться по этому полю и обновиться ->
procedure TForm16.DBGrid2TitleClick(Column: TColumn);
begin
if (Column.FieldName = 'pole1') then begin - не срабатывает условие
IBQuery1.SQL.Clear;
IBQuery1.SQL.Add('Select * from FILE');
IBQuery1.SQL.Add('where (Priz = 1) and (Kod = :P0)');
IBQuery1.SQL.Add('Order by pole1,pole2,pole3');
IBQuery1.Params[0].AsInteger := p1;
IBQuery1.Open;
end;
end;
Stanislav (2006-06-08 12:04:00) [6]Либо использовать грид из EHLIB или CxGrid
Sergey13 (2006-06-08 10:52:00) [7]2VALUA (08.06.06 10:29)
>Неужели каждый раз заново открывать набор , но с разный индексацией
Если в запрос добавить секцию where, то это не будет выглядеть таким страшным решеним. 8-)
ЮЮ (2006-06-08 10:40:00) [8]
> Неужели каждый раз заново открывать набор , но с разный
> индексацией - IBQUERY1
Для IBQuery это вполне естественно.
Если же хочется "изгаляться" имено над клиентским НД, то нужны другие DataSet-ы:
TCustomADODataSet.Sort;
TCustomClientDataSet.AddIndex
TCustomClientDataSet.IndexName