C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Resync, позиционирование ползунка в гриде
VovaN
Отправлено: 31.05.2005, 09:48


Дежурный стрелочник

Группа: Участник
Сообщений: 72



Пришлось написать метод типа Locate для DataSet
(чтоб он корректно находил поле по маске для всех типов полей)
получилось приблизительно так:
CODE

 grid->DataSource->DataSet->DisableControls();
   grid->DataSource->DataSet->First();
   while (!grid->DataSource->DataSet->Eof)
   {
     cell_str=grid->DataSource->DataSet->FieldByName(KeyField)->AsString;
     cell_str=cell_str.UpperCase();
     w_str=cell_str.SubString(1,KeyValue.Length());
     if (!w_str.AnsiCompare(KeyValue))
     {
       grid_index=grid->DataSource->DataSet->RecNo;
       search_result=true;
       break;
     }
     else
     {
       grid->DataSource->DataSet->Next();
     }
   }
 }
 else
 {
   search_result=true;
 }
 if (!search_result)
 {
   }
 /*  TResyncMode Mode;
 Mode << rmCenter;
 //
 if (!w_str.Length()==0)
  {
    grid->DataSource->DataSet->Resync(Mode);
//
  }
 // */
 grid->DataSource->DataSet->EnableControls();
 return search_result;

Я хочу, чтобы запись с найденным RecNo отображалась в центре грида. Думал для этого использовать Resync (в комментариях). Но при его использовании сбивается текущий RecNo (тоесть в центре грида отображается другая запись). Как это побороть?
Guest
Отправлено: 31.05.2005, 10:21


Не зарегистрирован







Попробуйте
...Dataset...->UpdateCursorPos();
VovaN
Отправлено: 31.05.2005, 11:01


Дежурный стрелочник

Группа: Участник
Сообщений: 72



Я дописал UpdateCursorPos() перед
grid->DataSource->DataSet->EnableControls();
не помогает
Guest
Отправлено: 31.05.2005, 12:22


Не зарегистрирован







Странно, а у меня так работает
CODE

Qry->DisableControls();
...
if (oldcode == (-1)) Qry->First();
else if (oldcode == (-2)) Qry->Last ();
else if (oldcode !=   0 ) Qry->Locate(...);
else   Qry->First();

Qry->UpdateCursorPos();

while (Qry->ControlsDisabled()) Qry->EnableControls();

И эта центровка иногда раздражает.

Вернуться в Работа с базами данных в C++Builder