AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

DevExpress cxGridView Daten auslesen

Ein Thema von Alfredo · begonnen am 19. Apr 2009 · letzter Beitrag vom 24. Apr 2009
Antwort Antwort
Thomas Horstmann

Registriert seit: 25. Apr 2007
Ort: NRW
87 Beiträge
 
Delphi 12 Athens
 
#1

Re: DevExpress cxGridView Daten auslesen

  Alt 20. Apr 2009, 12:39
Hallo,

das ist das Problem mit dem "Editor" des Views, der währende der Eingabe alles andere sperrt.
Und beim Drücken von "Enter" ist dieser noch aktiv.

1. Die Kunst ist jetzt, den Editor "sauber" zu beenden und dann die gewünschte Aktion auszuführen.
2. Dafür wird nach "EditValueChanged" eine Message abgesetzt.
3. Die Message wird im Hauptfenster verarbeitet.
4. Der Editor schliesst sich vor der Message (zum Glück).
5. Den zusätzlichen Wert würde ich mit "BeforePost" im DataSet holen.
Damit steht er gleich an der richtigen Stelle. Sauberer wäre
eine Verarbeitung auf der Datenbank z.B. per Trigger (meine Empfehlung).
6. Der Wert "ForceRefresh" sollte im DataSet aktiviert sein, damit alle
Spalten neu ausgelesen werden.

Ich verwende folgenden Code im Hauptfenster des Projekts:

Delphi-Quellcode:
...
public
  procedure ApplicationMessage
  ( var Msg : TMsg ;
    var Handled : Boolean) ;
...
const
WM_GRIDPOSTMESSAGE = WM_USER + 10000 ;
...
procedure TStart_Form.FormCreate(Sender: TObject);
begin
{ Messages abfangen }
Application.OnMessage := ApplicationMessage ;
end ;
...
procedure TStart_Form.ApplicationMessage
( var Msg : TMsg ;
  var Handled : Boolean) ;
var
iDataSet : TDataSet ;
begin
{ Grid }
if Msg.message = WM_GRIDPOSTMESSAGE then
  begin
  iDataSet := TcxGridDBTableView(Msg.wParam).DataController.DataSet ;
  if iDataSet.State in [dsInsert,dsEdit] then
    begin
    iDataSet.Post ;
    // gGlobalIBConnection.Transaction.CommitRetaining ;
    end ;
  end ;
end ;
...
Code im GridView:

Delphi-Quellcode:
procedure TGlobal_EditFields_Form.GridDBViewEditValueChanged(
  Sender: TcxCustomGridTableView; AItem: TcxCustomGridTableItem);
begin
PostMessage(Handle, WM_GRIDPOSTMESSAGE, Integer(Sender), 0) ;
end ;
Hinweis:
Wenn der "neue" Wert nicht in der Datenmenge benötigt wird, dann kann
der Wert z.B. via "ImageComboBox" angezeigt werden. Dafür muss
diese Spalte als "Unbound" deklariert werden.

Alternativ geht evtl. auch OnGetText.

Viele Grüsse
Tom
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz