Announcement

Collapse
No announcement yet.

Devexpress - Quantumgrid im Bound Mode auf den Spalteninhalt zugreifen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Devexpress - Quantumgrid im Bound Mode auf den Spalteninhalt zugreifen

    Hi,

    ich verzweifel bei an einem grundlegenden Problem und bin auch bei Devexpress in den Foren nicht fündig geworden.

    Mein Grid (Version 6) ist an eine Tabelle gebunden. Ich ändere die Spalte Menge und möchte in OnEditvalueChanged den Wert mit der Spalte Preis multiplizieren.

    Ich bekomme aus den Spalten aber nur die alten Werte und nicht die neuen geänderten Werte zurück.
    Code:
    procedure TForm1.UpdatePosPreis;
    var
      menge, EPreisB, GPreisB: TcxCustomGridTableItem ;
      cxCustomDataController : TcxCustomDataController ;
      fMenge, fEPreisB, fGPreisB : Double ;
    
      Function GetValue ( Column : Integer ) : double ;
        var
          s : String ;
        Begin
          s := GridView.DataController.DisplayTexts[ GridView.DataController.FocusedRowIndex, Column ] ;
          if ( Pos ( '€', s ) > 0 ) then
            Delete ( s, Pos ('€', s), 1 ) ;
          try
            Result := StrToFloat ( s ) ;
          except
            on e:Exception do
              Begin
                Add ( Format( 'Column %d Fehler: %s', [ Column, e.message] ) ) ;
                Result := 0 ;
              End ;
          End ;
        End ;
    
    const
      cTagMenge = 3 ;
      cTagEPreisB = 4 ;
      cTagGPreisB = 5 ;
    begin
      // Versuch 1
      cxCustomDataController := GridView.DataController ;
      fMenge   := cxCustomDataController.Values[ cxCustomDataController.FocusedRowIndex, cTagMenge ] ;
      fEPreisB := cxCustomDataController.Values[ cxCustomDataController.FocusedRowIndex, cTagEPreisB ] ;
      fGPreisB := cxCustomDataController.Values[ cxCustomDataController.FocusedRowIndex, cTagGPreisB ] ;
      Add ( Format ( '1 über GridView.DataController.Values[ cxCustomDataController.FocusedRowIndex, Spalte ] Menge: %0.2f * EPreis %0.2f = GPreis %0.2f',
         [ fMenge, fEPreisB, fGPreisB ] ) ) ;
    
      // Versuch 2
      menge   := gridview.DataController.GridView.FindItemByTag( cTagMenge ) ;
      EPreisB := gridview.DataController.GridView.FindItemByTag( cTagEPreisB ) ;
      GPreisB := gridview.DataController.GridView.FindItemByTag( cTagGPreisB ) ;
    
      Add ( Format ( '2 über gridView.DataController.Values[col].EditValue Menge: %0.2f * EPreis %0.2f = GPreis %0.2f',
         [ Double(Menge.EditValue),
           Double(EPreisB.EditValue),
           Double(GPreisB.EditValue) ] ) ) ;
    
      // Versuch 3
      Add ( Format ( '3 Über col.EditValue Menge: %0.2f * EPreis %0.2f = GPreis %0.2f',
         [ Double(colMenge.EditValue),
           Double(ColEPreisB.EditValue),
           Double(ColGPreisB.EditValue) ] ) ) ;
      // Versuch 4
      Add ( Format ( '4 über Col.Databinding.field.Value Menge: %0.2f * EPreis %0.2f = GPreis %0.2f',
         [ Double(colMenge.DataBinding.Field.Value),
           Double(ColEPreisB.DataBinding.Field.Value),
           Double(ColGPreisB.DataBinding.Field.Value) ] ) ) ;
      // Versuch 5
      try
        fMenge := GridView.DataController.DisplayTexts[ GridView.DataController.FocusedRowIndex, cTagMenge ] ; // GetValue (3)
        fEPreisB := GetValue ( cTagEPreisB ) ;
        fGPreisB := GetValue ( cTagGPreisB ) ;
        Add ( Format ( '5 über DisplayTexts Menge: %0.2f * EPreis %0.2f = GPreis %0.2f',
           [ fMenge, fEPreisB, fGPreisB ] ) ) ;
      except
        on e:exception do
          Add ( '5 über StrToFloat ( Displaytext ) Fehler: '+e.Message ) ;
      End ;
      // Versuch 6
      Tableposition.post ;
      Add ( Format ( '6 Über DS Menge: %0.2f * EPreis %0.2f = GPreis %0.2f',
         [ TablePosition.FieldByname('Menge').AsFloat,
           TablePosition.FieldByname('EPreisB').AsFloat,
           TablePosition.FieldByname('GPreisB').AsFloat ] ) ) ;
    end;
    Die Prozedur wird jeweils in der Spalte beim "EditValueChanged" Event aufgerufen.

    Der Code ist der Versuch auf verschiedene Art und Weise die geänderten Werte der Spalten miteinander zu Multiplizieren um das Ergebnis dann in der Spalte GPreisB auszugeben.

    Nur der letzte Versuch nach dem Post die Wert aus der Tabelle auszulesen gibt die geänderten Werte.

    Es kann doch nicht richtig sein. Ich muss doch den aktuellen Wert einer jeden Spalte holen können ohne den Datensatz vorher in die Tabelle wegzuspeichern.

    Die Hilfe hat mich nicht weiter gebracht. Beim Datengebundenen wird immer auf Displayvalue verwiesen. Aber auch diese Eigenschaft bringt nicht den richtigen Erfolg.

    Es ist doch ein grundlegendes Problem. Es kann doch nicht sein das ich als einziger das Problem hat oder ist meine Vorgehensweise falsch.

    Ich hoffe es gibt jemanden der mir helfen kann und will.


    Vielen Dank in voraus

    Gruss
    Ralf

  • #2
    Hi,

    rufe im Ereignise EditValueChanged folgendes auf:
    Code:
    Sender.Controller.EditingController.Edit.PostEditValue;
    //  AItem.EditValue sollte jetzt den neuen Wert haben
    Cu, Frank

    Comment


    • #3
      Danke Frank für die schnelle antwort.

      Ich habe viel geblättert in der Hilfe aber dass das Controller Objekt vom Typ TcxCustomGridTableController ist, da bin ich nicht drauf gekommen und wurde auch in der Hilfe nicht angesprochen.

      Darf ich fragen, wie Du darauf gekommen bist? Gibt es ein Tutorial oder ein Beispiel dazu - oder war ich nur zu blöd die Hilfe richtig zu lesen?

      Gruss
      Ralf

      Comment


      • #4
        Hi Ralf,

        wenn mir Hilfe und Beispiele keine Antwort liefern, durchforste ich als nächstes die Knowledge Base. Dort finde ich in den meisten Fällen schon die Lösung. Wenn nicht, stelle ich im Support Center meine Frage. Und Developer Express hat mich noch nie hängen lassen.

        Dein Problem hatte ich halt auch schon, und die Antwort fand ich nach langer Suche in der Knowledge Base.

        Frank

        Comment

        Working...
        X