2013-07-17 13 views
5

Inni programiści, Mam niestandardową stronę listy, na której użytkownik może wybrać kilka rekordów, nacisnąć przycisk w okienku Akcja, który uruchamia pewną logikę w klasie i wszystko, co działa dobrze . Mój problem polega na tym, że kursor nie pozostaje na tym samym rekordzie, ale przechodzi na szczyt siatki. Brzmi jak znany problem?Kursor przesuwa się na górę podczas odświeżania siatki na stronie listy

Przechowuję FormDataSource strony listy za pomocą argumentów w klasie niestandardowej, która ma całą logikę.

Próbowałem kilku rzeczy, ale żaden nie działał.

  1. formDataSource.research (true) prawda parametr powinien zachować pozycję po Badania wykonuje swoją pracę. Zgaduję, że powinno to być najprostsze rozwiązanie. Zapytanie o listę list zawiera 2 źródła danych połączone przy użyciu sprzężenia zewnętrznego. Domyślam się, że badanie (prawda) działa tylko z połączeniami wewnętrznymi.

  2. formDatasource.setPosition (pozycja)

    Int położenia;
    position = formDatasource.getPosition();

    formDatasource.research();

    formDatasource.setPosition (pozycja);

    Przechowuję pozycję za pomocą getPosition i ustaw ją ponownie za pomocą metody setPosition. Nie używać.

  3. formDataSource.findRecord()

    currentRecord = formDatasource.cursor();

    recId = currentRecord.RecId;
    formDatasource.reread();

    formDatasource.research();
    formDatasource.findRecord (currentRecord);

    Używam ds.cursor(), aby uzyskać bieżący rekord i przekazać go do findRecord() po badaniu(). Nie używać.

  4. formDataSource.findValue()

    currentRecord = formDatasource.cursor();

    recId = currentRecord.RecId;
    formDatasource.reread();

    formDatasource.research();
    formDatasource.findValue (fieldNum (Table, RecId), int642str (recId));

    Używam ds.cursor(), aby uzyskać bieżący rekord i recId i przekazać go do findValue() po badaniu(). Nie używać.

I debugowałem powyższy kod, a metoda cursor() pobiera aktualny rekord i jego recId. Zacząłem wierzyć, że może to być ograniczenie strony listy i modlenie się, że ktoś mi udowodni, że się mylę.

Każda pomoc jest doceniana.

+0

Można również spróbować użyć makra zadania i wywołać # taskF5, aby odświeżyć formularz. Wynik taki sam jak kliknięcie przycisku odświeżania na stronach listy. Więcej informacji można znaleźć na stronie http://msdn.microsoft.com/en-us/library/hh812104.aspx. –

+0

'research' ma opcjonalny parametr boolowski, aby zachować pozycję w siatce. Aby uzyskać doskonały przegląd, zobacz http://kashperuk.blogspot.com.es/2010/03/tutorial-reread-refresh-research.html –

Odpowiedz

2

Użyj metody 3, ale lubię to.

YourTable tmpTable; 


currentRecord = formDatasource.cursor(); 

recId = currentRecord.RecId; 
tmpTable = TmpTable::findByRecId(recId); 
formDatasource.reread(); 

formDatasource.research(); 
formDatasource.findRecord(tmpTable); 

Mam nadzieję, że to pomoże.

+0

// po prostu ustaw rekwizyt bufora tmpTable: JUW_tmpCostCalculation positionDummy; ; positionDummy.recId = JUW_tmpCostCalculation.recid; JUW_tmpCostCalculation_DS.research(); JUW_tmpCostCalculation_DS.findRecord (positionDummy); –

0

Spróbuj przekazać "prawda" jako parametr metody badawczej. Funkcja salesLine_ds.research (true) działa w moim przypadku, tzn. Jeśli badam linię, kursor pozostaje w tej samej linii.

0

użyć drugiego sposobu jak ten

int position; 
position = formDatasource.getPosition(); 
//Make your update operations here 
formDatasource.research(true); 

formDatasource.setPosition(position); 

to działa na mnie.

Powiązane problemy