сумма значений выбранных ячеек в stringgrid

как я могу получить значение из выбранной ячейки или диапазона в stringgrid? Обратите внимание, что иногда эти ячейки содержат строковые значения!

пробовал GridCoord, но это не работает хорошо, потому что иногда есть "скрытые столбцы".

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;

1 ответов


как получить сумму значений с плавающей запятой выборки в TStringGrid ?

для стандартных Delphi TStringGrid например так:

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;

как получить сумму значений с плавающей запятой выборки (включая невидимые ячейки) в TAdvStringGrid ?

следовательно, вы, скорее всего, используете TAdvStringGrid вы можете попробовать следующее еще не протестировано или оптимизированный код. Пока я нашел, Вы можете использовать AllFloats свойство для доступа ко всем ячейкам сетки как float независимо от скрытых столбцов или строк. Предполагая, что вы хотите суммировать непрерывный выбор после скрытия определенного столбца, вы можете попробовать этот код:

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;