2012-10-09 5 views
6

Wie kann ich den Summenwert der ausgewählten Zellen oder einen Bereich in stringgrid erhalten? Bitte beachten Sie, dass diese Zellen manchmal String-Werte enthalten!Summenwert ausgewählter Zellen in Stringgrid

Ich versuche GridCoord, aber es funktioniert nicht gut, weil manchmal "versteckte Spalten" sind.

procedure TMainShowForm.StgSelectionChanged(Sender: TObject; ALeft, ATop, 
ARight, ABottom: Integer); 
var 
i: Integer; 
gc: TGridCoord; 
sum:double; 
begin 
    for i := 1 to stg.SelectedCellsCount do 
    begin 
     gc := stg.SelectedCell[i - 1]; 
     sum:=sum+stg.floats[(gc.X),(gc.Y)]; 
    end; 
    AdvOfficeStatusBar1.Panels[0].Text:='Sum = '+ formatfloat('#,##0.',sum); 
    AdvOfficeStatusBar1.Panels[1].Text:='Count = '+ inttostr(stg.SelectedCellsCount); 
end; 
+0

Was 'stg' im Code ist, ist, dass' TAdvStringGrid'? – TLama

Antwort

8

Wie Summe der Gleitkommawerte einer Auswahl in TStringGrid zu bekommen?

Für Standard-Delphi TStringGrid zum Beispiel auf diese Weise:

procedure TForm1.Button1Click(Sender: TObject); 
var 
    Sum: Double; 
    Val: Double; 
    Col: Integer; 
    Row: Integer; 
begin 
    Sum := 0; 
    for Col := StringGrid1.Selection.Left to StringGrid1.Selection.Right do 
    for Row := StringGrid1.Selection.Top to StringGrid1.Selection.Bottom do 
     if TryStrToFloat(StringGrid1.Cells[Col, Row], Val) then 
     Sum := Sum + Val; 
    ShowMessage('Sum of the selection is ' + FloatToStr(Sum) + '.'); 
end; 

Wie Summe des Fließkommawertes eine Auswahl (einschließlich unsichtbaren Zellen) in TAdvStringGrid zu bekommen?

Daher verwenden Sie wahrscheinlich TAdvStringGrid Sie können den folgenden noch nicht getesteten oder optimierten Code versuchen. So weit ich fand, können Sie AllFloats Eigenschaft verwenden, um auf alle Rasterzellen als Float unabhängig von versteckten Spalten oder Zeilen zuzugreifen. Angenommen, Sie kontinuierliche Auswahl summieren möchten, nachdem Sie eine bestimmte Spalte auszublenden, können Sie diesen Code versuchen:

procedure TForm1.Button1Click(Sender: TObject); 
var 
    Sum: Double; 
    Col: Integer; 
    Row: Integer; 
begin 
    Sum := 0; 
    for Col := AdvStringGrid1.Selection.Left to AdvStringGrid1.Selection.Right do 
    for Row := AdvStringGrid1.Selection.Top to AdvStringGrid1.Selection.Bottom do 
     Sum := Sum + AdvStringGrid1.AllFloats[Col, Row]; 
    ShowMessage('Sum of the selection is ' + FloatToStr(Sum) + '.'); 
end; 
+1

thx ich werde es bald versuchen –

+0

es funktioniert gut, aber nicht für den Fall, wenn Sie col oder Zeile im Raster versteckt haben –

+0

Ich habe nicht genügend Aufmerksamkeit auf das Beispiel, das Sie gebucht haben. Sicher, es funktioniert nur, weil ich Glück habe und weil TMS Software diesen Teil der Kontrolle genauso wie die Standard Delphi VCL behält. Code von meinem Beitrag ist für "TStringGrid", aber Sie sprechen über ein anderes Steuerelement, höchstwahrscheinlich 'TAdvStringGrid'. – TLama

Verwandte Themen