|
|
#1 |
|
Участник
|
Grid и место курсора
Здраствуйте ,
Знаете как бывает - кажеться здесь будет всё просто , но ... Есть простой грид и после редактирования данных по условиям там обновляеться несколько строк в тот же самый грид . Проблема в том - как обновлят данные и снова поставит курсор , в тот же самое место , где он был . Я попpoбывал такое : Код: ...
MyTable mTbl, myTblChg;
mTbl = MyTable_ds.cursor();
ttsbegin;
while select myTblChg forupdate where ...
{
// update ...
}
ttscommit;
MyTable_ds.research();
MyTable_ds.findRecord(mTbl);
... ...Спасибо за помочь ! С уважением , Римантас |
|
|
|
|
#2 |
|
NavAx
|
Если я правильно понимаю, то ответ на ваш вопрос можно увидеть здесь Восстановление позиционирования в грид
|
|
|
|
|
#3 |
|
Участник
|
Цитата:
Сообщение от LEX
Если я правильно понимаю, то ответ на ваш вопрос можно увидеть здесь Восстановление позиционирования в грид
. У меня было присвоение :mTbl = MyTable_ds.cursor() ; поменял я , как там на примерах : mTbl.data( MyTable ); Но всё равно - MyTable_ds.research(); MyTable_ds.findRecord(mTbl); непоставляет в старое место , скачает в первую строку ... Римантас |
|
|
|
|
#4 |
|
NavAx
|
А в каком методе у вас происходит обновление? В clicked?
|
|
|
|
|
#5 |
|
Участник
|
Прошу прощения - а причём тут Cliсked? у вас идёт явное присвоение
mTbl = MyTable_ds.cursor() ; при котором mTbl всегда будет содержать текущий курсор. попробуйте запоминать recId или курсор независящий от ds, например myTable = maTable::findMyTable(mytable.field1); |
|
|
|
|
#6 |
|
Участник
|
Нет , в modified . Я писал , редагирую в гриде , тогда после редактирования есть запрос - "Обновлять ето для другх записей из той же самой серии ?" и если "Да" , то тогда хожу по while - делаю update для другиь записей . Вот полный код :
Код: public boolean modified()
{
Date dDat,dText;
CIRFASCharacterValue spVar;
CIRFASModelConfigId spalva;
boolean ret;
asgmTbl.data( UTAsgmTable );
asgms = UTAsgm::find(asgmTbl.AsgmId);
dDat = asgmTbl.PlanDate;
spVar = asgmTbl.CharacterValue;
spalva = asgmTbl.ModelVariant;
dText = this.dateValue();
ret = super();
if ( ret && asgms.ColourNesc )
{
element.SpChng( 1, dText );
}
if ( ret && asgms.MailNesc )
{
if ( dText != dDat )
{
element.Emailinti(asgms.AsgmId,date2str(dDat,321,2,2,2,2,2),date2str(dText,321,2,2,2,2,2),spvr);
}
}
if ( spvr )
{
UTAsgmTable_ds.research();
UTAsgmTable_ds.findRecord(asgmTbl);
}
return ret;
}
//
void SpChng( Int nFld, Date dText, Str cVal = "" )
{
UTAsgmTable asgmTb;
spvr = false;
if ( box::yesNoCancel( "Ar keisti visiems spalv.variantams", DialogButton::Ok, "Klausimas !" ) )
{
ttsbegin;
while select forupdate asgmTb
index hint Index1
where asgmTb.SalesId == asgmTbl.SalesId &&
asgmTb.AsgmId == asgmTbl.AsgmId
{
if ( asgmTb.CharacterValue && asgmTb.RecId != asgmTbl.RecId )
{
if ( nFld == 1 )
asgmTb.PlanDate = dText;
if ( nFld == 2 )
asgmTb.FactDate = dText;
if ( nFld == 3 )
asgmTb.AsgmValue = cVal;
asgmTb.update();
}
}
ttscommit;
spvr = true;
}
} |
|
|
|
|
#7 |
|
NavAx
|
Посмотрите дебаггером, заходите ли вы в
X++: if ( spvr ){...} |
|
|
|
|
#8 |
|
Участник
|
Надеюсь выходные были прекрасные ...
. Хочу продолжить ету тему . LEX , я обязательно проверил с дебагером , как вы просили - условие правилное , там заходим обязательно ... Может быть ещё есть каких нибудь идей , как поставить гридный курсор на старое место , после обновления данных ? Спасибо заранее ! С уважением , Римантас |
|
|
|
|
#9 |
|
NavAx
|
А а в момент отработки метода UTAsgmTable_ds.findRecord(asgmTbl), asgmTbl точно у вас находится на той строке на которой был курсор?
|
|
|
|
|
#10 |
|
Участник
|
Цитата:
Сообщение от Rimantas
Надеюсь выходные были прекрасные ...
. Хочу продолжить ету тему . LEX , я обязательно проверил с дебагером , как вы просили - условие правилное , там заходим обязательно ... Может быть ещё есть каких нибудь идей , как поставить гридный курсор на старое место , после обновления данных ? Спасибо заранее ! С уважением , Римантас Спасибо ! Римантас |
|
|