// позиционировать DataSet
void __fastcall TData::GoPosition(TDataSet* ds, int cur_id, String nField)
{
while (!ds->Eof && ds->FieldByName(nField)->AsInteger != cur_id)
ds->Next();
}
Обновление GRID (dxMasterView) c позиционированием
Нужно после UPDATE обновить GRID (dxMasterView).
Если ничего в гриде не трогать, то вроде как в большинстве случаев работает. Но если там установить сортировку (пользователь ткнет в header grid-a) то после UPDATE позиционирование происходит на ту позицию где Item стоял до изменений. А соответственно если поле было под сортировкой, то Item может заметно переместиться.
в стандартном Grid-e я использую :
Код:
здесь это не помогает. Т.к. сортировка происходит после выборки.
Конечно было бы красиво перемещаться на нужный элемент.
Но если нет - то может кто знает, как выключить программно сортировку.
Цитата: mainigor
Hi All!
Нужно после UPDATE обновить GRID (dxMasterView).
Если ничего в гриде не трогать, то вроде как в большинстве случаев работает. Но если там установить сортировку (пользователь ткнет в header grid-a) то после UPDATE позиционирование происходит на ту позицию где Item стоял до изменений. А соответственно если поле было под сортировкой, то Item может заметно переместиться.
в стандартном Grid-e я использую :
здесь это не помогает. Т.к. сортировка происходит после выборки.
Конечно было бы красиво перемещаться на нужный элемент.
Но если нет - то может кто знает, как выключить программно сортировку.
Нужно после UPDATE обновить GRID (dxMasterView).
Если ничего в гриде не трогать, то вроде как в большинстве случаев работает. Но если там установить сортировку (пользователь ткнет в header grid-a) то после UPDATE позиционирование происходит на ту позицию где Item стоял до изменений. А соответственно если поле было под сортировкой, то Item может заметно переместиться.
в стандартном Grid-e я использую :
Код:
// позиционировать DataSet
void __fastcall TData::GoPosition(TDataSet* ds, int cur_id, String nField)
{
while (!ds->Eof && ds->FieldByName(nField)->AsInteger != cur_id)
ds->Next();
}
void __fastcall TData::GoPosition(TDataSet* ds, int cur_id, String nField)
{
while (!ds->Eof && ds->FieldByName(nField)->AsInteger != cur_id)
ds->Next();
}
здесь это не помогает. Т.к. сортировка происходит после выборки.
Конечно было бы красиво перемещаться на нужный элемент.
Но если нет - то может кто знает, как выключить программно сортировку.
Очень сложно и загадочно все описано. Что всетаки нужно - позиционировать курсор или программно сортировать данные?
Задача как правило решается использованием закладки (TBookmark*) - перед внесением изменений устанавливается закладка - а затем к ней осуществляется переход.
ну еще можно программно щёлкнуть по хидеру таблицы (после выборки) ) по которому щёлкал юзер до UPDATE и выборки...
Цитата: kot_
Очень сложно и загадочно все описано. Что всетаки нужно - позиционировать курсор или программно сортировать данные?
Задача как правило решается использованием закладки (TBookmark*) - перед внесением изменений устанавливается закладка - а затем к ней осуществляется переход.
Задача как правило решается использованием закладки (TBookmark*) - перед внесением изменений устанавливается закладка - а затем к ней осуществляется переход.
чего-то действительно не очень понятно :)
нужно :
или
1. позиционироваться (желательно при любых условиях)
или
2. то же (хотя бы при выключенной сортировке)
пока вышел из положения, программно выключаю сортитровку : в цикле пробегаю по полям и все удаляю из массива сортируемых полей.
Если кто ткнёт в header - :(
TBookmark - наверное будет хорош для одно пользовательской программы, а вдруг кто добавит запись ? Или при Refresh она не появится?