Numer wiersza w DBGrid

0

Witam,

Mam DBGrida z widocznymi np. 20 wierszami a rekordów w DataSource mam z tysiąc. Skąd pobrać indeks ( w odniesieniu do DataSource ) pierwszego widocznego wiersza ( tego co się wyświetla na samym górze DBGrid ). Pytanie dodatkowe: jak ustawić aktualny rekord ( RecNo ) tak aby wyświetlał się w konkretnym wierszu w DBGrid ( np. najwyższym lub drugim od dołu ).

Z góry dziekuję za pomoc.

Przemek Wieczorek

0

Wiele zależy od konstrukcji bazy...

Stwórz w bazie pole "index" typu : autoincrement. Następnie wyświetlaj te pole w tabeli na początku po lewej stronie. Teraz nawet po użyciu filtrów będziesz wiedział, które pole jest aktualnie widoczne.

Niestety to może być zawodne... W momencie jak usuniesz jakiś element z bazy to indeksowanie pozostanie bez zmian i będziesz miał dziury w bazie, a danej typu autoincrement nie można modyfikować! Z tego też względu warto stworzyć drugą kolumnę "numer"(tylko ją pozostawić widoczną) i ją 'ręcznie' w kodzie zmieniać w momencie usuwania któregoś z elementów :

DataModule1->glowny->Delete();
DataModule1->glowny->Prior();
a=DataModule1->glowny->Fields->FieldByName("Numer")->AsInteger;
while(DataModule1->glowny->Eof!=1)
{
  DataModule1->glowny->Edit();
  DataModule1->glowny->Fields->FieldByName("Numer")->AsInteger=a;
  DataModule1->glowny->Post();
  DataModule1->glowny->Next();
  a=a+1;
}

Musisz też pamiętać o nadawaniu numeru w momencie dodawania rekordu :

a = DataModule1->glowny->RecordCount;
a = a+1;
DataModule1->glowny->Fields->FieldByName("Numer")->AsInteger=a;
DataModule1->glowny->Post();

A aby w szybki sposób dotrzeć do wybranego rekordu robisz tak: Taka procedurka może być pod przyciskiem obok pola Edit :

DataModule1->glowny->First();
DataModule1->glowny->MoveBy(StrToInt(Edit->Text)-1);//Tutaj z pola Edit program pobiera który rekord chcesz obejrzeć.

Mam nadzieję, że pomogłem. Powyższy zapis pochodzi z Buildera aby zmienić go na delphi zmień znaki '->' na kropki '.' a znak przypisania '=' na ':=' reszta jest identyczna.

0

Dziękuję za odpowiedź ale nie o to mi chodziło.

Jak patrzymy na DBGrida aktywny wiersz jest wyświetlany w wybranym wierszu. Własciwość Row wskazuje na podświetlony wiersz jeżeli ją zmienimy to podświetlany będzie inny wiersz ale aktywny wiersz będzie daje wyświetlany w tym samym miejscu. Chodzi mi o to jak wymusić aby aktywny wiersz ( tzn. ten który będziemy edytować ) będzie wyświetlany w wybranym wierszu ). SetScroll nie działa.

Głowię się nad tym od zeszłego tygodnia.

0

Poczytaj tutaj, moze cos znajdziesz: http://delphi.about.com/od/usedbvcl/a/tdbgrid.htm

TDBGrid potrafi byc upierdliwy

1 użytkowników online, w tym zalogowanych: 0, gości: 1