Wanot Ответов: 1

Сортировка двух столбцов в stringgrid в delphi


У меня есть строковая сетка с 3 столбцами; Year, Value1 & Value2. Я хочу отсортировать столбец по убыванию года (выберите самый маленький год). Если самый маленький год имел более 1 данных (пример: 2000,2000,2000), то мне нужно выбрать, какой из них выше по значению1 соответствует году. То же самое и со значением 3.

Мой вопрос в том,как мне выбрать результат, подобный вложению?

Вход в систему-Аккаунты Google[^]

Что я уже пробовал:

это то, что я попытался отсортировать по одному столбцу:

procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
  Buffer: TStringList;
begin
  Buffer := TStringList.Create;
  for i := 0 to StringGrid1.ColCount - 1 do
  begin
    Buffer.Assign(StringGrid1.Cols[0]);
    Buffer.CustomSort(@StringListSortCompare);
    StringGrid1.Cols[0].Assign(Buffer);
  end;
  FreeAndNil(Buffer);
end;

function StringListSortCompare(List: TStringList; Index1, Index2: Integer): Integer;
begin
  Result := StrToIntDef(List[Index2], 0) - StrToIntDef(List[Index1], 0)
end;

procedure TForm1.FormCreate(Sender: TObject);
  var
  i, j: Integer;
begin
  Randomize;

  with StringGrid1 do
  begin
    ColCount := 3;
    RowCount := 6;

    for i := 0 to ColCount - 1 do
      for j := 0 to RowCount - 1 do
        //Cells[i, j] := IntToStr(Random(5000));
        stringgrid1.Cols[0].Add('Year');
        stringgrid1.Cells[0,1]:='2000';
        stringgrid1.Cells[0,2]:='2001';
        stringgrid1.Cells[0,3]:='2000';
        stringgrid1.Cells[0,4]:='2002';
        stringgrid1.Cells[0,5]:='2000';
        stringgrid1.Cols[1].Add('Pcorr');
        stringgrid1.Cells[1,1]:='15.6';
        stringgrid1.Cells[1,2]:='15.7';
        stringgrid1.Cells[1,3]:='15.9';
        stringgrid1.Cells[1,4]:='15.9';
        stringgrid1.Cells[1,5]:='15.9';
        stringgrid1.Cols[2].Add('DD');
        stringgrid1.Cells[2,1]:='7.3';
        stringgrid1.Cells[2,2]:='7.2';
        stringgrid1.Cells[2,3]:='7.0';
        stringgrid1.Cells[2,4]:='7.5';
        stringgrid1.Cells[2,5]:='7.6';

  end;
end;