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

Вниз

Как заморозить TDbGrid?   Найти похожие ветки 

 
гончий   (2003-04-09 09:48) [0]

Необходимо отключить его от базы, пробежаться по таблице, вернуть курсор на исходное место с помощью закладки и снова подключить его. Но если запись до навигации была не в середине видимых рядов, то грид после подключения дергается. Нужно чтобы было незаметно, что выполнялась навигация по таблице. Клонировать таблицу не предлагать :)


 
AlexSerp   (2003-04-09 09:54) [1]

НД.DisableControls
после обработки встать на нужную запись
НД.EnableControls


 
Соловьев   (2003-04-09 09:56) [2]


> Клонировать таблицу не предлагать :)

RxMemoryData


 
гончий   (2003-04-09 10:00) [3]

2 AlexSerp - я так и делаю, но ведь при этом редко DbGrid остается неподвижным после установки закладки!


 
Mike Kouzmine   (2003-04-09 10:05) [4]

А конкретно, какая база? Для разных - разные решения. И каков смысл этой операции (вероятно есть другое решение)


 
AlexSerp   (2003-04-09 10:11) [5]

Ну тогда создай НД в run-тайме (аналогичный, прикрученному к гриду) и бегай по нему, раз такая проблема, что грид дергается.


 
гончий   (2003-04-09 10:14) [6]

Mike Kouzmine - решение должно быть одно для всех баз данных, т.к. все наследники TDataSet подддерживают закладки, а курсор возвращается на место именно с их помощью. Я тут уже кое-что придумал, если получится покажу как :)


 
Lord Warlock   (2003-04-09 10:14) [7]


> гончий (09.04.03 10:00)

Значит не тот набор данных отключаешь.. DisableControls
вырубает все, связанное с отображением в любых контролах при любых действиях, в тч и при установке и переходу по закладкам


 
гончий   (2003-04-09 10:18) [8]

2 Lord Warlock - не смешите меня :)

GRID.DataSource.DataSet.DisableControls;
pMark := GRID.DataSource.DataSet.GetBookmark;
try
while( not GRID.DataSource.DataSet.Eof )do
begin
{...}
GRID.DataSource.DataSet.Next;
end;
finally
GRID.DataSource.DataSet.GotoBookmark(pMark);
GRID.DataSource.DataSet.FreeBookmark(pMark);
end;


 
гончий   (2003-04-09 10:19) [9]

//-- точнее так --
GRID.DataSource.DataSet.DisableControls;
pMark := GRID.DataSource.DataSet.GetBookmark;
try
while( not GRID.DataSource.DataSet.Eof )do
begin
{...}
GRID.DataSource.DataSet.Next;
end;
finally
GRID.DataSource.DataSet.GotoBookmark(pMark);
GRID.DataSource.DataSet.FreeBookmark(pMark);
GRID.DataSource.DataSet.EnableControls;
end;


 
Mike Kouzmine   (2003-04-09 10:21) [10]

>>решение должно быть одно для всех баз данных
Универсальное решение - прокладки на каждый день.
Тогда пиши свой грид. Если не хочешь, то придется спуститься на землю.


 
Johnmen   (2003-04-09 10:32) [11]

Подкинуть сырца ?


 
гончий   (2003-04-09 10:34) [12]

Спасибо всем за "квалифицированную помощь":

Проблема у меня решилась путем добавления к наследнику от TCustomDbGrid пары методов:

//---------------------------------------------------------

{ FSaveMark: TBookmark; FStepMark: Integer; - поля Self Object }

procedure TDsCustomDBGrid.FreezeGrid;
var
IPos: Integer;
begin
if( FDataLink.Active )then
begin
FDataLink.DataSet.DisableControls;
FSaveMark := FDataLink.DataSet.GetBookmark;
IPos := VisibleRowCount div 2;
FStepMark := IPos - Row;
FDataLink.DataSet.MoveBy(FStepMark);
FSaveMark := FDataLink.DataSet.GetBookmark;
end;
end;

procedure TDsCustomDBGrid.UnFreezeGrid;
var
IPos: Integer;
begin
if( FDataLink.Active )then
begin
try
FDataLink.DataSet.GotoBookmark(FSaveMark);
FDataLink.DataSet.MoveBy(-FStepMark);
finally
FDataLink.DataSet.FreeBookmark(FSaveMark);
FDataLink.DataSet.EnableControls;
end;
end;
end;

//---------------------------------------------------------

Можно на основе этого написать пару внешних процедур для работы со стандартным гридом. Проверил работу на:
Paradox, dBase, Interbase, MySql & Interbase



 
гончий   (2003-04-09 10:39) [13]

Удалено модератором
Примечание: Личная переписка


 
Johnmen   (2003-04-09 10:47) [14]

Ок, мылю...:)


 
Lord Warlock   (2003-04-09 10:50) [15]


> гончий (09.04.03 10:18)


Это Вы меня не смешите :)

B:=Table1.GetBookmark;
Table1.DisableControls;
Table1.First;
while not Table1.Eof do
Table1.Next;
Table1.GotoBookmark(B);
Table1.EnableControls;
Table1.FreeBookmark(B);



 
Lord Warlock   (2003-04-09 10:53) [16]

или если угодно, так

with DBGrid1.DataSource.DataSet do
begin
B:=GetBookmark;
DisableControls;
First;
while not Eof do
Next;
GotoBookmark(B);
EnableControls;
FreeBookmark(B);
end;


как ни странно, у меня ничего не прыгало


 
гончий   (2003-04-09 10:57) [17]

Lord Warlock - установи перед вызовом процедуры, курсор на верхнюю запись в гриде, подальше от центра и выполни процедуру. после ее выполнения, ряд, на котором установится курсор будет уже не верхним в гриде, а посередине.


 
Lord Warlock   (2003-04-09 11:11) [18]


> гончий (09.04.03 10:57)

Ну понятно. Без лишней писанины можно использовать предложение
AlexSerp ©
, только создать не присоединенный к контролам набор данных не run-time, а постоянно.


 
гончий   (2003-04-09 11:20) [19]

Lord Warlock - это не проще, если в таблице lookup | calc - поля, она фильтруется, или, что еще хуже изменяется динамически



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

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

Наверх





Память: 0.48 MB
Время: 0.009 c
7-91573
coolcat
2003-03-08 23:08
2003.04.28
Блокировка лотка CD-ROM


3-91155
RDA
2003-04-02 12:40
2003.04.28
Не получается создать первичный (уникальный) составной индех


3-91184
aleksey_sv
2003-04-09 18:04
2003.04.28
Локальная база в сети


1-91352
saha
2003-04-15 09:40
2003.04.28
Подменю у popupmenu


4-91599
shu_3d
2003-03-03 14:56
2003.04.28
Размеры шрифтов





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский