[Delphi] Poszukiwanie eventu...

0

Szukam eventu, który odpalałby procedurę za każdym razem, gdy w DbGridzie zaznaczony zostaje rekord (to implikuje sytuacje takie jak wybór kolejnego rekordu za pomocą kliknięcia myszki, przewinięcia rolką, lub wyborem strzałkami).

EDIT: Znowu sam sobie odpowiem na pytanie: Te eventy to kolejno do sytuacji z nawiasu: OnCellClick, OnKeyPressed, OnMouseWheel)

0

napiszę to po raz setny na tym forum DBGRID NIE PRZECHOWUJE DANYCH - ON JE TYLKO WYŚWIETLA!! W związku z tym "wybór kolejnego rekordu" to nie zdarzenie DBGrida tylko DataSetu, a dokładnie OnAfterScroll.
BTW jak Ci ktoś zrobi DataSet.Next, w DBGridzie zaznaczy Ci się kolejny wiersz a żadne zdarzenie z grida nie zostanie zgłoszone

0

Jednak w DataSource na AfterScroll nie moge skorzystać z super prostej procedury jak poniżej (w zasadzie nie jestem pewien czemu):

e_id.text:=grid_kontrahenci.Fields[0].AsString;
e_imie.text:=grid_kontrahenci.Fields[1].AsString;
e_nazwisko.text:=grid_kontrahenci.Fields[2].AsString;
e_telefon.text:=grid_kontrahenci.Fields[3].AsString;
e_ulica.text:=grid_kontrahenci.Fields[4].AsString;
e_nr_domu.text:=grid_kontrahenci.Fields[5].AsString;
e_nr_mieszkania.text:=grid_kontrahenci.Fields[6].AsString;
e_kod_pocztowy.text:=grid_kontrahenci.Fields[7].AsString;
e_miasto.text:=grid_kontrahenci.Fields[8].AsString;
e_nip.text:=grid_kontrahenci.Fields[9].AsString;
e_firma.text:=grid_kontrahenci.Fields[10].AsString;
e_regon.text:=grid_kontrahenci.Fields[11].AsString;
e_rabat.text:=grid_kontrahenci.Fields[12].AsString;

Myslałem o przebudowaniu procedury w stylu...

e_id.text:=t_kontrahenci.fieldvalues['id_kontrahenta'];

...ale to zawsze zczytuje pierwszy rekord

0
edit.Text := DataSet.FieldByName('NazwaPola').AsString;
0

A to działa. Dziękuję :)

0

Aj. Pośpieszyłem się jednak z zamykaniem tematu.

Po zastosowaniu powyższego rozwiązania po otwarciu formatki widzę wyświetlony w gridzie jedynie pierwszy rekord. Jego wartości są sczytane do editów.

Zapis procedury:

procedure Tf_kontrahenci.t_kontrahenciAfterScroll(DataSet: TDataSet);
begin
e_id.text:=t_kontrahenci.FieldByName('id_kontrahenta').AsString;
e_imie.text:=t_kontrahenci.FieldByName('imie').AsString;
e_nazwisko.text:=t_kontrahenci.FieldByName('nazwisko').AsString;
e_telefon.text:=t_kontrahenci.FieldByName('telefon').AsString;
e_ulica.text:=t_kontrahenci.FieldByName('ulica').AsString;
e_nr_domu.text:=t_kontrahenci.FieldByName('nr_domu').AsString;
e_nr_mieszkania.text:=t_kontrahenci.FieldByName('nr_mieszkania').AsString;
e_kod_pocztowy.text:=t_kontrahenci.FieldByName('kod_pocztowy').AsString;
e_miasto.text:=t_kontrahenci.FieldByName('miasto').AsString;
e_nip.text:=t_kontrahenci.FieldByName('nip').AsString;
e_firma.text:=t_kontrahenci.FieldByName('nazwa_firmy').AsString;
e_regon.text:=t_kontrahenci.FieldByName('regon').AsString;
e_rabat.text:=t_kontrahenci.FieldByName('rabat').AsString;
end;
0

Ja zawsze zmiane rekordu robilem na zdarzeniu dataseta a dokladnie OnDataChange

0

O, to zdaje się rozwiązywać sprawę.

0

@woolfik nie DataSet tylko DataSource jak już. Poza tym OnDataChange generuje się też przy zmianie danych w wierszu.

@JacekKw a możesz powiedzieć czemu nie używasz DBEditów?

0

Moge powiedzieć. Używam tych samych pól jako wyszukiwarek, oraz pól do wprowadzania nowych rekordów. Gdyby zależało mi jedynie na wyświetlaniu danych z rekordu, użyłbym Dbeditów :)

0

Ja namiętnie używam DBEdit do edycji/dodawania rekordów... ale może ja się nie znam :/

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