🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.delphi
5 messages
5 total messages Started by ExM Mon, 22 Jan 2018 15:11
Wybieranie pozycji z XDBGrid
#346257
Author: ExM
Date: Mon, 22 Jan 2018 15:11
14 lines
1826 bytes
Hej, 
szukam optymalnego rozwiązania do wybrania zaznaczonych wpisów na XDBGrid

Mam grida i powiedzmy 2 kolumny
W XDBGRid.Columns[0] - mam CheckBox'a do wyboru wierszy (bez powiązania z DB)
W XDBGRid.Columns[1] - mam ID rekordu w bazie danych który chce np. usunąć

Jak wykonać przejście po XDBGridzie aby uzyskać ID rekordów do usunięcia?

Zwykle leciałem po samym DataSet'cie ale odnosiłem się tylko do wartości które w nim występowały a tutaj muszę jakoś się dowiedzieć czy jest zaznaczony chceckbox w gridzie...

Możecie podpowiedzieć jak to ruszyć?

ExM
Re: Wybieranie pozycji z XDBGrid
#346258
Author: Krzysztof Szyszka
Date: Mon, 22 Jan 2018 16:39
37 lines
2233 bytes
> Hej,
> szukam optymalnego rozwiązania do wybrania zaznaczonych wpisów na XDBGrid
>
> Mam grida i powiedzmy 2 kolumny
> W XDBGRid.Columns[0] - mam CheckBox'a do wyboru wierszy (bez powiązania z DB)
> W XDBGRid.Columns[1] - mam ID rekordu w bazie danych który chce np. usunąć
>
> Jak wykonać przejście po XDBGridzie aby uzyskać ID rekordów do usunięcia?
>
> Zwykle leciałem po samym DataSet'cie ale odnosiłem się tylko do wartości które w nim występowały a 
> tutaj muszę jakoś się dowiedzieć czy jest zaznaczony chceckbox w gridzie...
>
> Możecie podpowiedzieć jak to ruszyć?

Możesz wykonać analogiczną iterację po XDBGrid.SelectedRows, albo skorzystać z metody 
XDBGrid.ForEachDataRow z parametrem reSelectedRows:

function TMainForm.GetSelectedID(DBGrid: TXDBGrid; ID: TField): string;
var
  ID_List: string;
begin
  ID_List := '';
  DBGrid.ForEachDataRow(reSelectedRows,
    procedure
    begin
      if ID_List = '' then ID_List := ID.Text
      else ID_List := ID_List + ', ' + ID.Text;
    end);
  Result := ID_List;
end;

-- 
pozdrowienia
Krzysztof Szyszka, X-Files Software
Developer of X-DBGrid Component
Embarcadero Technology Partner
http://www.x-files.pl/
Re: Wybieranie pozycji z XDBGrid
#346259
Author: ExM
Date: Tue, 23 Jan 2018 20:30
27 lines
2415 bytes
W dniu poniedziałek, 22 stycznia 2018 17:39:46 UTC+1 użytkownik Krzysztof Szyszka napisał:
> Możesz wykonać analogiczną iterację po XDBGrid.SelectedRows, albo skorzystać z metody 
> XDBGrid.ForEachDataRow z parametrem reSelectedRows:
> 
> function TMainForm.GetSelectedID(DBGrid: TXDBGrid; ID: TField): string;
> var
>   ID_List: string;
> begin
>   ID_List := '';
>   DBGrid.ForEachDataRow(reSelectedRows,
>     procedure
>     begin
>       if ID_List = '' then ID_List := ID.Text
>       else ID_List := ID_List + ', ' + ID.Text;
>     end);
>   Result := ID_List;
> end;

Niestety ForEachDataRow dopiero od D2009 - a ja rzeźbię na D5 :D
Ale SelectedRows idealnie do tego się nadaje.
Zrobiłem to tak jak niżej - działa :)

if Lista.SelectedRows.Count > 0 then
     for i : =0 to Lista.SelectedRows.Count - 1 do Begin
       TabelaDanych.GotoBookmark(Pointer(Lista.SelectedRows.Items[i]));
       >> tutaj procedura która ma być wykonana na danych rekordu z TabelaDanych 
     end;
Re: Wybieranie pozycji z XDBGrid
#346260
Author: Krzysztof Szyszka
Date: Wed, 24 Jan 2018 15:20
45 lines
2496 bytes
> > Możesz wykonać analogiczną iterację po XDBGrid.SelectedRows, albo skorzystać z metody
> > XDBGrid.ForEachDataRow z parametrem reSelectedRows:
> >
> > function TMainForm.GetSelectedID(DBGrid: TXDBGrid; ID: TField): string;
> > var
> >   ID_List: string;
> > begin
> >   ID_List := '';
> >   DBGrid.ForEachDataRow(reSelectedRows,
> >     procedure
> >     begin
> >       if ID_List = '' then ID_List := ID.Text
> >       else ID_List := ID_List + ', ' + ID.Text;
> >     end);
> >   Result := ID_List;
> > end;
>
> Niestety ForEachDataRow dopiero od D2009 - a ja rzeźbię na D5 :D
> Ale SelectedRows idealnie do tego się nadaje.
> Zrobiłem to tak jak niżej - działa :)
>
> if Lista.SelectedRows.Count > 0 then
>      for i : =0 to Lista.SelectedRows.Count - 1 do Begin
>        TabelaDanych.GotoBookmark(Pointer(Lista.SelectedRows.Items[i]));
>        >> tutaj procedura która ma być wykonana na danych rekordu z TabelaDanych
>      end;

I prawidłowo. A jak całość umieścisz jeszcze w takim bloku jak poniżej, to w XDBGridzie
nie będzie widać, że skaczesz po zaznaczonych rekordach i wrócisz w to samo miejsce.

Lista.DisablePosition;
try
  // tu Twój kod
finally
  Lista.EnablePosition;
end;



-- 
pozdrowienia
Krzysztof Szyszka, X-Files Software
Developer of X-DBGrid Component
Embarcadero Technology Partner
http://www.x-files.pl/ 
Re: Wybieranie pozycji z XDBGrid
#346261
Author: ExM
Date: Thu, 25 Jan 2018 08:16
10 lines
1728 bytes
W dniu środa, 24 stycznia 2018 16:20:25 UTC+1 użytkownik Krzysztof Szyszka napisał:

> Lista.DisablePosition;
> try
>   // tu Twój kod
> finally
>   Lista.EnablePosition;
> end;

o... super - dodaje do mojej bazy wiedzy :P
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads