🚀 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 07:11
Wybieranie pozycji z XDBGrid
#294003
Author: ExM
Date: Mon, 22 Jan 2018 07:11
20 lines
700 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
#294004
Author: "Krzysztof Szysz
Date: Mon, 22 Jan 2018 17:39
37 lines
1200 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
#294006
Author: ExM
Date: Tue, 23 Jan 2018 12:30
29 lines
1087 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
#294007
Author: "Krzysztof Szysz
Date: Wed, 24 Jan 2018 16:20
45 lines
1363 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
#294009
Author: ExM
Date: Thu, 25 Jan 2018 00:16
10 lines
244 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