Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ehlib [D7, MSSQL]


gedd ©   (2004-02-09 07:22:00) 

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


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

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

Если не хочешь "статические" столбцы, то запоминаешь в реестре (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;

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


gedd   (2004-02-11 11:35:00) [2]

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


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

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


gedd   (2004-02-10 11:43:00) [4]

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


gedd   (2004-02-09 18:50:00) [5]

Значит так переименование столбцов пускаю на 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".


Sandman25   (2004-02-09 15:23:00) [6]

[8] gedd © (09.02.04 14:57)

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


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

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


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

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

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


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

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


KSergey   (2004-02-09 14:04:00) [10]

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


Sandman25   (2004-02-09 13:37:00) [11]

[4] gedd © (09.02.04 13:36)

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


gedd   (2004-02-09 13:36:00) [12]

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


Sandman25   (2004-02-09 11:18:00) [13]

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


gedd   (2004-02-09 11:07:00) [14]

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


Sandman25   (2004-02-09 10:48:00) [15]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо