сумма значений выбранных ячеек в 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;