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();
|
И эта центровка иногда раздражает. |
|