Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.03.09;
Скачать: CL | DM;

Вниз

ehlib   Найти похожие ветки 

 
gedd ©   (2004-02-09 07:22) [0]

При одновремменной сортировке по нескольким столбцам в dbehlib пропадают заголовки столбцов. Автор ответил что dbehlib в случае динамических столбцов при сортировке, пересоздает label у полей/столбцов. В связи с этим вопрос где и как я могу востановить наименования столбцов?


 
Sandman25 ©   (2004-02-09 10:48) [1]

По-моему, лучше сделать нединамические столбцы. Тогда не надо будет восстанавливать, потому что не будет исчезать.


 
gedd ©   (2004-02-09 11:07) [2]

Не могу разные базы, разное количество столбцов.


 
Sandman25 ©   (2004-02-09 11:18) [3]

Тогда поподробнее насчет исчезновения. Было на русском, стало на английском?


 
gedd ©   (2004-02-09 13:36) [4]

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


 
Sandman25 ©   (2004-02-09 13:37) [5]

[4] gedd © (09.02.04 13:36)

Значит, после сортировки нужно опять вызвать "отдельную процедурку".


 
KSergey ©   (2004-02-09 14:04) [6]

Или все же определить статические столбцы, и играться Visible для достижения требуемого результата.


 
roottim   (2004-02-09 14:24) [7]

>я сам в отдельной процедуре указываю как назвать столбец и его ширину
а "назвать" наверно записывается в колумн ехлиба... ежели так, то выход прост.. "назвать" записывать в DisplayName филда НД


 
gedd ©   (2004-02-09 14:57) [8]

>опять вызвать "отдельную процедурку".
Где вызвать, вот в чем вопрос?
я вызывал на DBGridEh1TitleClick

>назвать" записывать в DisplayName
Пробовал все равно берет имена полей, повторяю в случае сортировки по нескольким столбцам они пересоздаются.


 
Sandman25 ©   (2004-02-09 15:23) [9]

[8] gedd © (09.02.04 14:57)

Сортируется автоматически, через EhLibBde/Ado/CDS? Тогда либо напишите свой "автосортировщик" (в EhLib.HLP это описывается), либо сортируйте не автоматически, а ручками, делая в OnTitleBtnClick индексы либо изменяя order by. Тогда будет ясно, где вызывать эту процедурку.


 
roottim   (2004-02-09 15:23) [10]

>Пробовал
как? твоя процедура при каком событии отрабатывает.. или ручками запускаем


 
gedd ©   (2004-02-09 18:50) [11]

Значит так переименование столбцов пускаю на DBGridEh1TitleClick, но это помогает только при сортировке по одному столбцу.
Пример дословно

procedure TMainForm.DBGridEh1TitleClick(Column: TColumnEh);
var
i:integer;
begin
for i:=0 to DBGridEh1.Columns.Count-1 do
begin
DBGridEh1.Columns[i].Title.TitleButton := TRUE;
end;
DBGridEh1.OptionsEh := DBGridEh1.OptionsEh + [dghAutoSortMarking];
DBGridEh1.OptionsEh := DBGridEh1.OptionsEh + [dghMultiSortMarking]; Titles;
end;

По поводу слета наименований автор ehlib сказал следующее:
"Если колонки динамические (не созданы в дизаин тайме), то они заново пересоздаются и Caption берется из Field.DisplayLabel".


 
gedd ©   (2004-02-10 11:43) [12]

Люди может кто знает как вывернуться из такого положения?


 
roottim   (2004-02-10 12:11) [13]

Titles -- я так понимаю твоя процедура?...
если не ошибаюсь то MemTable еще не готов к использованию в ехлибе.. и в данном случае он должен строить запрос и соотв-но его переоткрыть...
еже-ли все так... то Titles должна отрабатывать ивент DataSet на AfterOpen и выставлять DesplayLabel филда


 
gedd ©   (2004-02-11 11:35) [14]

Все заработало большое спасибо roottim.


 
VLAD-MAL   (2004-02-11 12:59) [15]

Ну, что тут такого необыкновенного?

Если не хочешь "статические" столбцы, то запоминаешь в реестре (DBEhGrid это умеет!) состояние таблицы перед Close датасета, потом, после Open, восстанавливаешь состояние таблицы для этого набора данных из реестра.
Или ручками - перебирай все столбцы, фиксируй, к каким полям они относятся, и запоминай состояние (ширина/высота/пометка на сортировку и т.п.). Потом, после переотрытия набора данных, все восстанавливаешь.
Пример (рабочий):

procedure Tfrb_GridFrame.ActivateFrame;
var
i, j: Integer;
str : string;
RegIniFile : TRegIniFile;
begin
inherited;
try
...
...
if not ItWasActivated then begin // При первой активизации пишем в реестр
RegIniFile := TRegIniFile.Create("\SOFTWARE\" // конфигурацию "по умолчанию"
+ LeftStr(ExtractFileName(Application.ExeName),
Pos(".",ExtractFileName(Application.ExeName))-1)
+"\GRIDS\DEFAULT\"+SelfComplexName, KEY_WRITE); // SelfComplexName - нечто уникальное, характеризующее этот набор данных
try
dbGrid.SaveGridLayout(RegIniFile); // dbGrid : TDBGridEh
finally
RegIniFile.Free;
end;
ItWasActivated := True
end;

RegIniFile := TRegIniFile.Create("\SOFTWARE\" // При любой активизации
+ LeftStr(ExtractFileName(Application.ExeName), // загружаем сохраненную
Pos(".",ExtractFileName(Application.ExeName))-1) // ранее конфигурацию
+"\GRIDS\LAST_WORKED\"+SelfComplexName, KEY_READ);

try
dbGrid.RestoreGridLayout(RegIniFile,[grpColIndexEh, grpColWidthsEh, grpSortMarkerEh, grpColVisibleEh,
grpRowHeightEh, grpDropDownRowsEh, grpDropDownWidthEh]);
finally
RegIniFile.Free;
end;
RefreshDataSet(New_Id); // Здесь выполняем сортировку в соответствии с метками для редактирования

except
ShowMessage("Ошибка открытия справочника "" +Self.Caption +""");
exit;
end;
end;

//-----------------
Усе просто!



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

Текущий архив: 2004.03.09;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.021 c
8-25827
arcoant
2003-09-19 22:45
2004.03.09
OpenGL - Shadows


14-25895
Феликс
2004-02-15 14:02
2004.03.09
Добрая жена, густые щи, другого не ищи. Согласны?


4-25960
aser
2004-01-04 10:36
2004.03.09
как отловить завершение потока?


14-25934
Serpent
2004-02-12 19:45
2004.03.09
Всех с наступающим праздником!


6-25846
AlexC
2003-12-28 10:34
2004.03.09
Синхронизация времени в сети