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.
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
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;
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
Comment