Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Zugriff auf DBGrid-Felder ohne Datensatzzeiger zu bewegen

135 views
Skip to first unread message

Britta Müller

unread,
Sep 1, 2001, 7:02:12 AM9/1/01
to
Ich möchte am Ende der Tabellenbearbeitung den Inhalt des ersten
Feldes (sozusagen "DBGrid.Cells[0,0].AsString") auslesen, ohne jedoch
den Cursor / den Datensatzzeiger zu bewegen. Kann mir da mal jemand
auf die Sprünge helfen?

Britta

Sven Biehl

unread,
Sep 1, 2001, 8:36:07 AM9/1/01
to
Am Sat, 01 Sep 2001 11:02:12 GMT, schrieb DustyM...@web.de (Britta
Müller):

>DBGrid.Cells[0,0]

Ich habe mal irgendwo gelsen, daß man das dadurch erreichen können soll,
indem man auf TStringGrid typecastet (TStringGrid(DBGrid).xxx)
Allerdings habe ich das nicht ausprobiert, da ich selbst nur das Grid
von DevExpress einsetze, wo das auch so möglich ist.

Bis denne dann .... Eisi

Ralf Mimoun

unread,
Sep 1, 2001, 10:42:35 AM9/1/01
to
Moin!

"Britta Müller" <DustyM...@web.de> schrieb im Newsbeitrag
news:3b90bda9...@news.cis.dfn.de...

Schau Dir mal die Eigenschaften DataLink, ActiveRecord an, und ein wenig
Typecasten brauchts auch noch. Folgender Code liefert den Text für eine
Zelle:

------------------------------
type
TDirtyCustomDBGrid= class(TCustomDBGrid);

function VisibleText(ACustomDBGrid: TCustomDBGrid; MyCol, MyRow: integer):
string;
var
OldActiveRecord: integer;
begin
with TDirtyCustomDBGrid(ACustomDBGrid) do begin
Result := '';
OldActiveRecord := DataLink.ActiveRecord;
try
DataLink.ActiveRecord := MyRow;
if Assigned(Columns[MyCol].Field) = True then begin
Result := Columns[MyCol].Field.DisplayText;
end;
finally
DataLink.ActiveRecord := OldActiveRecord;
end;
end;
end;
------------------------------

Ich hab dunnemals mehrere Tage gebraucht, um die Interna zu verstehen, mit
der Routine sollte es einfacher sein.

Bye, Ralf


Britta Müller

unread,
Sep 1, 2001, 1:40:50 PM9/1/01
to
On Sat, 1 Sep 2001 16:42:35 +0200, "Ralf Mimoun"
<r.mi...@rapid-software.de> wrote:

>Moin!


>function VisibleText(ACustomDBGrid: TCustomDBGrid; MyCol, MyRow: integer):

>.........

Ich bin schier baff! Funzt ungemein gut!
Vielen Dank :-D

Britta Müller

unread,
Sep 2, 2001, 4:45:44 PM9/2/01
to
Hm... nun stellt sich heraus, das ich nicht das erste *sichtbare* Feld
haben möchte, sondern das erste Feld im Grid überhaupt. Gibt es dafür
auch eine gute Lösung?

Wie kann ich die Zeilenhöhe (in Pixel) festlegen im TDBGrid?

Britta

Hans Lesmeister

unread,
Sep 4, 2001, 6:51:51 AM9/4/01
to
> Hm... nun stellt sich heraus, das ich nicht das erste *sichtbare* Feld
> haben möchte, sondern das erste Feld im Grid überhaupt. Gibt es dafür
> auch eine gute Lösung?

with Query do begin
DisableControls;
try
bm := GetBookMark;
try
First;
TueEtwas( );
finally
GotoBookMark(bm);
FreeBookMark(bm);
end;
finally
EnableControls;
end;
end;

So oder ähnlich?

Gruß
Hans

Ralf Mimoun

unread,
Sep 4, 2001, 8:03:53 AM9/4/01
to
Moin!

"Hans Lesmeister" <Han...@Bigfoot.com> schrieb im Newsbeitrag
news:9n2bpd$4odu3$1...@ID-83517.news.dfncis.de...


> > Hm... nun stellt sich heraus, das ich nicht das erste *sichtbare* Feld
> > haben möchte, sondern das erste Feld im Grid überhaupt. Gibt es dafür
> > auch eine gute Lösung?
>
> with Query do begin
> DisableControls;
> try
> bm := GetBookMark;
> try
> First;
> TueEtwas( );

...

Sie meinte _Feld_, nicht _Datensatz_. Aber wahrscheinlich meinte sie 1. Feld
in der Tabelle, nicht im Grid. Da muß man wohl die Tiefen des Pufferung
durchforsten.

Bye, Ralf


Hans Lesmeister

unread,
Sep 5, 2001, 5:22:17 AM9/5/01
to
> Sie meinte _Feld_, nicht _Datensatz_. Aber wahrscheinlich meinte sie 1.
Feld
> in der Tabelle, nicht im Grid. Da muß man wohl die Tiefen des Pufferung
> durchforsten.

Sie hat im ersten Posting DBGrid.Cells[0,0].AsString geschrieben.
Ich denke sie will das erste Feld im ersten Satz <zitat>im Grid
überhaupt</zitat>, dann muß sie also doch mit einem First( ) ganz nach oben
und dann halt Grid.Columns[0].Field.AsString um an den Inhalt des ersten
Feldes zu kommen.

Ehrlich gesagt verstehe ich den Sinn nicht so. Das erste Feld im aktuellen
Satz bekomme ich mit
Grid.Columns[0].Field und wenn es dann unbedingt aus dem ersten Satz sein
soll, dann hole ich das raus im AfterOpen-Event.

Gruß
Hans

Britta Müller

unread,
Sep 6, 2001, 4:23:55 AM9/6/01
to
wenn es dann unbedingt aus dem ersten Satz sein
>soll, dann hole ich das raus im AfterOpen-Event.
>
Das geht nicht, denn in dem Moment ist die db noch leer ;-)
Es handelt sich um eine "temporäre" db im DBGrid auf einem
Karteireiter (Nr. 2). Sinn: Dropdown-List im Grid, sonst würd's ja
auch ein StringGrid gute Dienste leisten.

Auf Karteireiter Nr. 3 soll dann das erste Feld ("0,0") als
Bemerkungsfeld (TEdit) voreingestellt werden. Die Vorbelegung des
Bermkungsfeldes soll derart erfolgen, dass bei einem Wechsel auf
Karteireiter 2 (mit dem Grid) der Cursor dort steht, wo er zuletzt
hingesetzt wurde und das Grid so aussieht, wie verlassen (Zeile,
Spalte, auch relative Position).

Hatte in den letzten Tagen leider keine Zeit den Bookmark-Vorschlag
auszuprobieren.

Ich bin erstaunt, dass das so schwierig ist. Wenn das DBGrid nämlich
von TCustomGrid abgeleitet ist müsste es "Cells" eigentlich geben,
oder?

Britta

Ralf Mimoun

unread,
Sep 6, 2001, 5:43:52 AM9/6/01
to
Moin!

"Britta Müller" <DustyM...@web.de> schrieb im Newsbeitrag

news:3b9730e...@news.cis.dfn.de...
...


> Ich bin erstaunt, dass das so schwierig ist. Wenn das DBGrid nämlich
> von TCustomGrid abgeleitet ist müsste es "Cells" eigentlich geben,
> oder?

Überleg mal, was das bedeuten würde. Alle Daten wären per Cells[]
erreichbar, ergo wäre die gesamte Tabelle im RAM. Delphi hält nur die
Datensätze, die zur Anzeige benötigt werden. Und wie Du an diese Daten
rankommst, habe ich schon geschrieben. Ansonsten hat man eben nur Zugriff
auf den aktuellen Datensatz. Datenbank eben, nicht Array.

Bye, Ralf


Hans Lesmeister

unread,
Sep 6, 2001, 7:06:03 AM9/6/01
to
> Auf Karteireiter Nr. 3 soll dann das erste Feld ("0,0") als
> Bemerkungsfeld (TEdit) voreingestellt werden. Die Vorbelegung des
> Bermkungsfeldes soll derart erfolgen, dass bei einem Wechsel auf
> Karteireiter 2 (mit dem Grid) der Cursor dort steht, wo er zuletzt
> hingesetzt wurde und das Grid so aussieht, wie verlassen (Zeile,
> Spalte, auch relative Position).

Ich verstehe den Sinn nicht ganz, glaube ich. Im Grid (Karteireiter 2) kann
der Benutzer mehrere Records eingeben. Auf Karteireiter 2 kann er _eine_
Bemerkung eingeben oder gibt es dort auch mehrere Records zu sehen mit je
ein Bemerkungsfeld? Wenn einer, warum soll der im ersten Feld des DataSets
gespeichert werden? Hat Kartei3 nur ein TEdit?

> Ich bin erstaunt, dass das so schwierig ist. Wenn das DBGrid nämlich
> von TCustomGrid abgeleitet ist müsste es "Cells" eigentlich geben,
> oder?

Natürlich gibt es Cells, nur das Cells[0, 0] immer die erste Zelle des
sichtbaren bereichs ist.

Gruß
Hans

0 new messages